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

网站后台管理系统的重要技术指标google推广费用

网站后台管理系统的重要技术指标,google推广费用,portfolio做网站,外卖网站建设的策划方案一、事件分发机制核心概念1. 事件分发三要素要素作用关键方法事件(Event)用户触摸动作的封装MotionEvent分发者负责将事件传递给下级dispatchTouchEvent()拦截者决定是否截断事件传递(仅ViewGroup)onInterceptTouchEvent()消费者最终处理事件的组件onTou…

一、事件分发机制核心概念

1. 事件分发三要素

要素作用关键方法
事件(Event)用户触摸动作的封装MotionEvent
分发者负责将事件传递给下级dispatchTouchEvent()
拦截者决定是否截断事件传递(仅ViewGroup)onInterceptTouchEvent()
消费者最终处理事件的组件onTouchEvent()

2. 事件序列组成

二、事件分发流程全景图

1. 事件传递层级

2. 核心方法调用链

// Activity
public boolean dispatchTouchEvent(MotionEvent ev) {if (getWindow().superDispatchTouchEvent(ev)) {return true; // 事件被消费}return onTouchEvent(ev); // 默认处理
}// PhoneWindow
public boolean superDispatchTouchEvent(MotionEvent event) {return mDecor.superDispatchTouchEvent(event);
}// ViewGroup
public boolean dispatchTouchEvent(MotionEvent ev) {// 1. 检查拦截if (onInterceptTouchEvent(ev)) {return onTouchEvent(ev); // 拦截事件}// 2. 分发子Viewfor (View child : children) {if (child.dispatchTouchEvent(ev)) {return true; // 子View消费}}// 3. 自身处理return onTouchEvent(ev);
}// View
public boolean dispatchTouchEvent(MotionEvent event) {if (mOnTouchListener != null && mOnTouchListener.onTouch(this, event)) {return true; // 优先回调OnTouchListener}return onTouchEvent(event); // 默认处理
}

三、ViewGroup 的事件分发机制

1. 拦截决策流程

public boolean onInterceptTouchEvent(MotionEvent ev) {// 默认实现:不拦截return false;
}

2. 分发优先级规则

  1. Z轴顺序:后添加的子View优先(可通过setElevation()调整)

  2. 可见性:GONE状态的View不参与分发

  3. 点击区域:仅分发到触摸区域内的子View

  4. 拦截标志:一旦拦截,整个事件序列不再检查拦截

3. 事件分发伪代码

boolean dispatchTouchEvent(MotionEvent ev) {boolean handled = false;// 1. ACTION_DOWN时重置状态if (action == ACTION_DOWN) {resetTouchState();}// 2. 检查拦截final boolean intercepted;if (action == ACTION_DOWN || mFirstTouchTarget != null) {intercepted = onInterceptTouchEvent(ev);} else {intercepted = true; // 后续事件默认拦截}// 3. 未拦截时分发子Viewif (!intercepted) {for (View child : reverseChildren) {if (child.isInTouchArea(ev)) {if (child.dispatchTouchEvent(ev)) {mFirstTouchTarget = child; // 记录消费目标handled = true;break;}}}}// 4. 自身处理if (mFirstTouchTarget == null) {handled = onTouchEvent(ev);}return handled;
}

四、View 的事件处理机制

1. 事件处理优先级

2. onTouchEvent 核心逻辑

public boolean onTouchEvent(MotionEvent event) {// 1. 检查是否可用if (!isEnabled()) {return clickable; // 不可用时仍返回clickable状态}// 2. 处理不同事件类型switch (event.getAction()) {case MotionEvent.ACTION_DOWN:setPressed(true); // 设置按压状态break;case MotionEvent.ACTION_MOVE:if (!pointInView(event)) {removeTapCallback(); // 移出视图时取消点击}break;case MotionEvent.ACTION_UP:if (mHasPerformedLongPress) {break; // 长按已处理}performClick(); // 执行点击break;case MotionEvent.ACTION_CANCEL:setPressed(false); // 重置状态break;}return true; // 始终消费事件(如果可点击)
}

五、事件分发的核心规则

1. 事件序列连续性原则

  • 消费权绑定:消费ACTION_DOWN的View将接收整个事件序列

  • 拦截时机

    • ACTION_DOWN:可自由决定是否拦截

    • 后续事件:若未拦截DOWN,仍可拦截MOVE/UP

  • 状态一致性:View应在DOWN时初始化触摸状态

2. 返回值含义表

方法返回true返回false
dispatchTouchEvent()事件已消费事件未消费,继续传递
onInterceptTouchEvent()拦截事件,不再传递子View不拦截,继续传递子View
onTouchEvent()事件已处理事件未处理,回传给父View

六、滑动冲突解决方案

1. 冲突类型分类

类型示例场景解决方案
同方向冲突ScrollView嵌套ListView外部拦截法
不同方向冲突ViewPager内嵌横向RecyclerView内部拦截法
嵌套冲突多层嵌套的复杂布局定制分发策略

2. 外部拦截法(推荐)

public class ParentView extends ViewGroup {private float mLastX, mLastY;@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {boolean intercepted = false;float x = ev.getX();float y = ev.getY();switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:intercepted = false; // DOWN必须不拦截break;case MotionEvent.ACTION_MOVE:float dx = Math.abs(x - mLastX);float dy = Math.abs(y - mLastY);if (dx > dy && dx > touchSlop) {intercepted = true; // 横向滑动时拦截}break;case MotionEvent.ACTION_UP:intercepted = false;break;}mLastX = x;mLastY = y;return intercepted;}
}

3. 内部拦截法

public class ChildView extends View {@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:getParent().requestDisallowInterceptTouchEvent(true); // 禁止父容器拦截break;case MotionEvent.ACTION_MOVE:if (needParentIntercept()) {getParent().requestDisallowInterceptTouchEvent(false); // 允许父容器拦截}break;}return super.dispatchTouchEvent(event);}
}

七、核心要点

1. 高频问题清单

  1. 事件分发流程是怎样的?

    • 答:Activity -> Window -> DecorView -> ViewGroup -> View

    • 每个层级通过dispatchTouchEvent()向下传递

  2. onTouch和onTouchEvent的区别?

    • onTouch是View.OnTouchListener接口方法

    • onTouchEvent是View自身的处理方法

    • onTouch优先级高于onTouchEvent

  3. ACTION_CANCEL何时触发?

    • 当父容器拦截事件时发送

    • 用于重置View的触摸状态

  4. 如何解决滑动冲突?

    • 外部拦截法:重写父容器onInterceptTouchEvent()

    • 内部拦截法:子View调用requestDisallowInterceptTouchEvent()

  5. 为什么ACTION_DOWN特殊处理?

    • 它决定整个事件序列的接收者

    • 父容器在DOWN时必须给子View机会

2. 高级问题解析

Q:requestDisallowInterceptTouchEvent()原理?

// View.java
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {if (mParent != null) {mParent.requestDisallowInterceptTouchEvent(disallowIntercept); // 递归向上}
}// ViewGroup.java
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {mGroupFlags |= FLAG_DISALLOW_INTERCEPT; // 设置标志位if (mParent != null) {mParent.requestDisallowInterceptTouchEvent(disallowIntercept);}
}// 在ViewGroup的dispatchTouchEvent中
final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
if (!disallowIntercept) {intercepted = onInterceptTouchEvent(ev); // 检查拦截
} else {intercepted = false; // 被子View禁止拦截
}

Q:事件分发中的设计模式?

  • 责任链模式:事件沿视图树传递,直到被处理

  • 模板方法模式:dispatchTouchEvent()定义处理框架

  • 观察者模式:OnTouchListener回调机制

Q:如何优化事件处理性能?

  1. 避免在事件方法中创建对象

  2. 使用getActionMasked()替代getAction()

  3. 对复杂手势使用GestureDetector

  4. 减少不必要的触摸状态更新

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

相关文章:

  • 用自己电脑怎么做网站云南网络营销公司哪家好
  • a站怎么进培训机构退费纠纷一般怎么解决
  • 建站工作室 网站建设工作室邯郸seo优化
  • 下载手机软件的app优化推广公司哪家好
  • 如何设置网站关键字简述网站制作的步骤
  • 网站建设分金手指专业十二360竞价推广技巧
  • 佘山做网站现在有哪些免费推广平台
  • 做钓鱼网站教程今天头条新闻100条
  • 有哪些做公司网站如何进行关键词优化工作
  • 网站建设w亿玛酷1流量订制渠道推广
  • 石家庄做手机网站建设泽成杭州seo网站推广排名
  • 做鞋子出口需要作网站吗适合企业员工培训的课程
  • 电商平台收费标准seo查询工具有哪些
  • 机械网站建设注意什么搜索引擎营销的手段包括
  • 做网站具备的条件小红书关键词搜索量查询
  • 网站开发代理合同网站设计公司怎么样
  • 全面的vi设计公司品牌seo培训
  • wordpress建设中seo岗位工作内容
  • 北京做网站的网络公司百度第三季度财报2022
  • 网站如何做百度才会收录长沙网站公司品牌
  • 品牌定位 品牌上海抖音seo公司
  • 上海网站建设定制公微博关键词排名优化
  • 湖南长沙天气seo排名点击 seo查询
  • 编程 朋友 做网站百度竞价点击价格
  • 合肥市建设工程造价信息网站推广哪个网站好
  • 文山微网站建设站长工具免费
  • 武汉关键词排名提升搜索引擎优化趋势
  • 网页游戏网站开发人工智能培训机构排名
  • 切实加强政府门户网站建设网络seo是什么意思
  • 手机app开发网站模板资源优化网站排名