当前位置: 首页 > wzjs >正文

网站怎么上传网络营销工程师

网站怎么上传,网络营销工程师,公司网站招聘板块怎么做,个人主页模板设计当用户触摸屏幕时,硬件层会捕获触摸信号,并将其转化为内核事件。 Android系统会通过InputManagerService和WindowManagerService等服务将这些事件包装成MotionEvent对象,并将其传递给Activity的dispatchTouchEvent()方法中,Activi…

1
2
3
4
5
当用户触摸屏幕时,硬件层会捕获触摸信号,并将其转化为内核事件。
Android系统会通过InputManagerService和WindowManagerService等服务将这些事件包装成MotionEvent对象,并将其传递给Activity的dispatchTouchEvent()方法中,Activity会先将事件分发给Window处理,Window调用superDispatchTouchEvent()方法,将事件交给 PhoneWindow处理,然后 PhoneWindow将事件传递给当前窗口的根视图(通常是DecorView,一个FrameLayout)。
DecorView是PhoneWindow的顶级视图,它是所有应用UI的容器。从这里开始,事件分发就进入了应用程序的视图层级

即,事件收集之后最先传递给Activity,随后依次向下传递:

Activity ——> Window ——> …… ——> DecorView ——> ViewGroup ——> …… ——> View

事件分发的流程

整个事件分发过程主要围绕MotionEvent对象展开,并且涉及三个关键方法:dispatchTouchEvent()onInterceptTouchEvent()onTouchEvent()

  1. 事件产生:用户触摸屏幕,系统生成MotionEvent
  2. 根视图分发MotionEvent首先传递给当前Activity,然后依次传递到当前窗口的根视图(DecorView)。
  3. dispatchTouchEvent()DecorView调用自己的dispatchTouchEvent(),决定是否将事件向下分发。
  4. onInterceptTouchEvent() (ViewGroup)
    • 如果DecorViewViewGroup(通常是),它会调用onInterceptTouchEvent()来判断是否拦截事件。
    • 如果返回true(拦截),事件将直接传递给DecorViewonTouchEvent()
    • 如果返回false(不拦截),事件将继续向下分发给子View。
  5. 向下分发DecorView遍历其子View,找到触摸区域内的子View,并调用该子View的dispatchTouchEvent()。这个过程会递归地重复步骤4和5,直到事件到达最底层的View或者被某个ViewGroup拦截。
  6. onTouchEvent() (View/ViewGroup)
    • 如果事件被某个View或ViewGroup拦截(onInterceptTouchEvent()返回true),或者事件一直分发到了最底层的View且没有被任何父ViewGroup拦截,那么该View/ViewGroup的onTouchEvent()方法将被调用。
    • 如果onTouchEvent()返回true,表示该View/ViewGroup消费了事件,事件传递流程结束。
    • 如果onTouchEvent()返回false,表示该View/ViewGroup不处理事件,事件会回溯到其父ViewGroup的onTouchEvent()方法(如果父ViewGroup之前没有拦截该事件)。
  7. 事件未被处理:如果事件最终没有被任何View或ViewGroup处理(即所有onTouchEvent()都返回false),那么该事件会沿着View树向上回溯,最终可能会被Activity的onTouchEvent()方法处理。如果连Activity的onTouchEvent()也返回false,则该事件将被丢弃。

Android事件分发是一个自上而下分发、自下而上处理(如果未被处理)的过程。

6
7
8
9

ViewGroup事件分发流程

依葫芦画瓢!ViewGroup的事件分发流程围绕刚刚提到的三个核心方法展开:dispatchTouchEvent()onInterceptTouchEvent()onTouchEvent()

  1. 事件到达:当一个MotionEvent到达ViewGroup时,首先调用其dispatchTouchEvent()方法。
  2. 是否拦截?:在dispatchTouchEvent()内部,首先调用onInterceptTouchEvent()来判断ViewGroup是否要拦截这个事件。
    • 如果onInterceptTouchEvent()返回true (拦截)
      • 事件不再向下分发给子View
      • ViewGroup自身的onTouchEvent()方法会被调用,以处理该事件。
      • 如果onTouchEvent()返回true,表示事件被ViewGroup消费。
      • 如果onTouchEvent()返回false,表示事件未被ViewGroup消费,事件会回溯到其父ViewGrouponTouchEvent()(如果父ViewGroup之前没有拦截该事件)。
    • 如果onInterceptTouchEvent()返回false (不拦截)
      • ViewGroup会遍历其子View
      • 它会判断触摸点是否在某个子View的范围内。
      • 如果找到合适的子View,就调用该子ViewdispatchTouchEvent()方法,将事件继续向下传递。
      • 如果子ViewdispatchTouchEvent()返回true (子View消费了事件):整个事件分发流程结束。
      • 如果子ViewdispatchTouchEvent()返回false (子View未消费事件)ViewGroup会继续尝试将事件分发给下一个合适的子View
      • 如果所有子View都遍历完了,但都没有消费事件,或者根本没有子View:那么事件会回传给当前ViewGroup,调用其onTouchEvent()方法来处理。
        • 如果ViewGrouponTouchEvent()返回true,事件被ViewGroup消费。
        • 如果ViewGrouponTouchEvent()返回false,事件未被ViewGroup消费,会继续回溯到父ViewGroup

关键点:

  • 优先拦截onInterceptTouchEvent()优先于子ViewdispatchTouchEvent()被调用,它有“一票否决权”。
  • 消费即止:一旦某个ViewViewGrouponTouchEvent()返回true,表示它消费了该事件序列,后续事件将直接传递给它,不再进行分发。
  • 回溯机制:如果一个事件沿着分发路径一直没有被消费(所有onTouchEvent()都返回false),它会沿着调用链向上回溯,最终可能由ActivityonTouchEvent()处理。

内部逻辑(伪代码表示):

public boolean dispatchTouchEvent(MotionEvent event) {boolean handled = false; // 标记事件是否被处理// 1. 调用 onInterceptTouchEvent() 判断是否拦截if (onInterceptTouchEvent(event)) {// 2. 如果 onInterceptTouchEvent() 返回 true (拦截)//    则事件不再向下分发给子View,而是直接交给当前ViewGroup的 onTouchEvent() 处理handled = onTouchEvent(event);} else {// 3. 如果 onInterceptTouchEvent() 返回 false (不拦截)//    则遍历子View,尝试将事件分发给它们// 查找触摸点所在的子View,并调用其 dispatchTouchEvent()// 伪代码:// for (int i = 0; i < getChildCount(); i++) {//     View child = getChildAt(i);//     if (child.isTouchedInBounds(event)) { // 检查触摸点是否在子View范围内//         if (child.dispatchTouchEvent(event)) { // 递归调用子View的dispatchTouchEvent()//             handled = true; // 子View消费了事件//             break; // 停止遍历,事件已被处理//         }//     }// }// 4. 如果所有子View都没有消费事件 (handled 仍为 false)//    或者根本没有子View//    则将事件交给当前ViewGroup的 onTouchEvent() 处理if (!handled) {handled = onTouchEvent(event);}}return handled; // 返回事件是否被处理
}

10

http://www.dtcms.com/wzjs/422661.html

相关文章:

  • 做网站的主流技术上海职业技能培训机构一览表
  • flash 网站 收费seo优化技巧
  • 公司网站二维码怎么做的推广自己的网站
  • 宁波优化网站厂家查网站关键词工具
  • 台州网站建设蓝渊淘宝怎么提高关键词搜索排名
  • 微信公众平台商城开发seo专业优化方法
  • 荥阳做网站网站关键词优化系统
  • 重庆做网站哪个好些嘛最佳磁力搜索天堂
  • 9 12米农村自建房设计图北京seo实战培训班
  • 网站如何做好seo央视新闻的新闻
  • 哪些做调查问卷的网站网站交易平台
  • 关于戒烟网站怎么做产品宣传推广方案
  • 网站推广站点建设与策划seo还有哪些方面的优化
  • 网站到公安局备案友情链接是啥意思
  • 广告设计与制作论文网站seo分析
  • 做网站域名多少钱网站一键生成
  • 购物网站开发将商品导入数据库互联网营销软件
  • 郑州做网站第一人北京seo推广
  • 高端婚纱摄影网站宁波网站排名优化seo
  • 建立问答类的网站seo发外链的网站
  • 南山商城网站建设哪家便宜哈尔滨网络公司
  • 独立网站推广公司营销伎巧第一季
  • 用宝塔给远程网站做备份电子商务网页制作
  • 网站建设源码行业关键词一览表
  • 如何加强省市级政府门户网站建设简述网站内容如何优化
  • 网站开发工程师职位要求seo网站结构优化
  • 太仓网站建设有限公司教育培训网站模板
  • 东营网站建设教程十大经典案例
  • 做电影网站程序好用吗重庆网站建设与制作
  • 营销型网站建设哪里有免费打广告平台有哪些