[Android]CoordinatorLayout 与 Behavior
CoordinatorLayout是一种增强版的FrameLayout,主要应用于构建具有交互效果的源码布局。它的源码使用场景通常包括与AppBarLayout、CollapsingToolbarLayout和Toolbar的源码结合,为应用增添更多的源码动态与交互性。布局结构的源码团长代收源码示意图如下所示,显示了这些组件之间的源码关系。
在CoordinatorLayout中,源码几个常用的源码属性和布局元素被提及,如app:layout_behavior、源码app:layout_anchor、源码app:layout_anchorGravity等。源码app:layout_behavior用于指定子视图的源码行为,而app:layout_anchor和app:layout_anchorGravity则用于指定锚点和布局重心。源码
AppBarLayout通常作为CoordinatorLayout的源码直接子类使用,其子视图通过设置自身的scrollFlags来实现期望的滑动行为。如果将AppBarLayout放置在普通的mac生成源码ViewGroup中而非CoordinatorLayout中,其功能将不会生效。
CollapsingToolbarLayout是一个实现了折叠功能的视图,用于包裹Toolbar,并作为AppBarLayout的子视图使用。它提供了折叠模式、内容遮罩等功能,为应用提供更具吸引力的界面体验。
Behavior是用于协调CoordinatorLayout内子视图交互的关键概念。如果要对CoordinatorLayout内部的滑动视图进行特定交互操作,需要设置Behavior。默认情况下,CoordinatorLayout内部的滑动视图已提供了相应的Behavior,如设置为app:layout_behavior="@string/appbar_scrolling_view_behavior"。
Behavior的方法分为几类:布局相关、事件处理、滑动事件、内容cms源码以及依赖于特定View的方法。了解这些方法在自定义Behavior时至关重要。
CoordinatorLayout与Behavior的关系在源码层面体现为,CoordinatorLayout在处理测量、布局、触摸事件时会调用Behavior的相关方法。这使得Behavior能够影响子视图的行为,实现更复杂且定制化的交互效果。
CoordinatorLayout实现了NestedScrollingParent2接口,支持嵌套滑动。在处理嵌套滑动时,CoordinatorLayout会将滑动事件分发至相应的Behavior方法,如onStartNestedScroll、onInterceptTouchEvent等,从而实现层次化的滑动处理。
在处理AppBarLayout的layui发卡源码滑动时,可以自定义AppBarStateChangeListener来监听其状态变化,例如展开、折叠和闲置状态,并相应地调整布局。
值得注意的是,正确使用CoordinatorLayout与Behavior需要深入理解其工作原理和方法,以充分利用它们提供的功能和特性,从而实现更丰富、更流畅的用户界面和交互体验。
图解UE4源码 其三(一)行为树系统执行任务的流程 发起执行请求
本文探讨UE4源码中的行为树系统执行任务流程,重点解析了发起执行请求的机制。在UE4中,行为树系统负责执行特定任务,而请求执行的关键代码在于调用`UBehaviorTreeComponent::RequestExecution()`函数。本文将分别从行为树加载后执行、任务执行完毕后搜索下一个任务、iframe布局源码以及由Decorator引发的Abort请求三种情境出发,详细解析RequestExecution函数的内部逻辑。
### 引子一:已加载行为树的执行
行为树加载完毕后,执行的关键代码就是发起执行请求。`RequestExecution()`函数的执行,实质上是开始执行行为树内的任务。在行为树加载后,调用此函数启动执行流程,开始搜索并执行任务。
### 引子二:任务执行完毕
任务执行完成后,行为树会自动发起搜索和执行下一个任务的请求。这同样依赖于`RequestExecution()`函数,但调用方式不同,需要传入任务执行的结果作为参数。
### 引子三:TimeLimit修饰器
UE4自带的`BTDecorator_TimeLimit`修饰器用于限制任务执行时间。当时间超过设定值,该修饰器会触发任务的Abort。分析其内部逻辑时,我们发现它通过调整时间计数器来控制任务执行时间,而不是通过直接中断任务。
### 发起执行请求的关键信息
请求执行的过程涉及多个关键信息的传递,包括搜索的起始点和结束点、要执行的节点、上一次任务的结果、是否尝试执行下一个子节点等。这些信息构成`ExecutionRequest`结构体,由`RequestExecution()`函数生成。
### 新手难度:从行为树加载后讲起
从行为树加载后执行为例,`RequestExecution()`函数仅做了初始化标志位、确定搜索范围、设定请求执行节点等基础操作。这些步骤为后续的执行流程做好准备。
### 中级难度:任务执行完毕后搜索下一个任务
在任务执行完毕后,调用`RequestExecution()`以自动搜索下一个任务。此时,函数逻辑主要围绕上一次任务的结果,决定是否切换到更高优先级的任务。
### 终极难度:Decorator的Abort
当Decorator引发任务中断时,`RequestExecution()`需要处理更复杂的逻辑,包括调整搜索范围、确保请求执行的节点符合特定条件。这涉及到更深入地理解行为树的结构和Decorator的工作机制。
### 应用——追查Decorator Abort记录
通过分析`RequestExecution()`函数的调用记录,可以追踪行为树运行过程中由Decorator引发的中断事件,有助于深入了解行为树的执行流程和异常情况。
本文通过对UE4源码中的`RequestExecution()`函数的深入分析,揭示了行为树系统执行任务流程中的关键机制,为理解和优化行为树的运行提供了理论基础和实践指导。
源代码是什么
说白了就是各种编程语言,你现在所用的所有软件都是用各种源代码编出来的,大概样子就像:
<!--STATUS OK--><html><head>
<meta /w.gif?q=%D4%B4%B4%FA%C2%EB&"+sQ+"path="+p+"&t="+new Date().getTime(); return true}
function al_c(A){ while(A.tagName!="TABLE")A=A.parentNode;return A.getAttribute("id")}
//--></script></head>
<body onload="document.f1.reset();" link="#CDC">
<table width="%" height="" align="center" cellpadding="0" cellspacing="0">
<form name=f1 action="/s">
<tr valign=middle>
<td width="%" valign="top" style="padding-left:8px;width:px;" nowrap>
<a href="/"><img src="/img/logo-yy.gif" border="0" width="" height="" alt="到百度首页"></a>
</td>
<td> </td>
<td width="%" valign="top">
<div class="Tit">
<a href="/ns?cl=2&rn=&tn=news&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'news'})">新闻</a> <span class="fB">网页</span> <a href="/f?kw=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'tieba'})">贴吧</a> <a href="/q?ct=&pn=0&tn=ikaslist&rn=&word=%D4%B4%B4%FA%C2%EB&fr=wwwt" onmousedown="return c({ 'fm':'tab','tab':'zhidao'})">知道</a> <a href="/m?tn=baidump3&ct=&lm=-1&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'mp3'})">MP3</a> <a href="/i?tn=baiduimage&ct=&lm=-1&cl=2&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'pic'})"></a> <a href="/v?ct=&rn=&pn=0&db=0&s=&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'video'})">视频</a> <a href="/s?lm=0&si=&rn=&ie=gb&ct=&wd=%D4%B4%B4%FA%C2%EB&tn=baidu" target="_blank" onmousedown="return c({ 'fm':'tab','tab':'dict'})">词典</a> <!--bds<a href="$bdDSURL$">硬盘</a> -->
</div>
图解UE4源码AI行为树系统 其二 一棵行为树是怎么被运行起来的
让我们深入理解UE4中AI行为树的运行机制。首先,行为树的运行流程大致分为以下几个步骤:发起执行: 可以通过AAIController::RunBehaviorTree()函数或Run Behavior任务节点启动新树。
抽象逻辑理解: 从Run Behavior任务节点出发,关键在于OwnerComp.PushInstance(*BehaviorAsset),这涉及子树的监控和结束条件。
检查与加载: 在运行前,UBehaviorTreeComponent会对子树资源、全局UBehaviorTreeManager、发起节点的父节点意愿进行检查。只有当所有条件满足,才会加载行为树资源。
内存计算与初始化: 加载后,通过FNodeInitializationData计算节点的执行顺序、内存需求,注入顶层decorator,然后设置初始值和内存偏移。
实例化与缓存: 将计算结果的树模板存入缓存,供后续使用。加载完成后,行为树实例会被添加到InstanceStack并标记为活跃。
新树加载并初始化完毕后,执行流程开始于根节点的服务调用和根节点的执行。每个节点的详细运行机制会在后续内容中进一步探讨。理解这些步骤有助于我们更好地掌握行为树的控制和执行逻辑。请问有没有大神知道网页中一排向左滑动的源代码?
<td><marquee behavior="alternate" direction="left" onmouseout="this.start()" onmouseover="this.stop()" scrollAmount="5" scrollDelay="" ></td>direction 表示滚动的方向,值可以是left,right,up,down,默认为left
behavior 表示滚动的方式,值可以是scroll(连续滚动)slide(滑动一次)alternate(来回滚动)
loop 表示循环的次数,值是正整数,默认为无限循环
scrollamount 表示运动速度,值是正整数,默认为6
scrolldelay 表示停顿时间,值是正整数,默认为0,单位似乎是毫秒
2024-11-23 11:51
2024-11-23 11:22
2024-11-23 11:20
2024-11-23 10:55
2024-11-23 09:55