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

免费网站域名空间关键字排名优化公司

免费网站域名空间,关键字排名优化公司,wordpress mysql 被删,个人博客大全Android的事件分发机制遵循责任链模式,事件从Activity开始,依次经过ViewGroup和View,每个层级都有机会处理事件。 事件分发流程 1. 事件分发的主要方法 // 事件分发入口 public boolean dispatchTouchEvent(MotionEvent event)// 拦截事件&…

Android的事件分发机制遵循责任链模式,事件从Activity开始,依次经过ViewGroup和View,每个层级都有机会处理事件。

事件分发流程

1. 事件分发的主要方法

// 事件分发入口
public boolean dispatchTouchEvent(MotionEvent event)// 拦截事件(ViewGroup独有)
public boolean onInterceptTouchEvent(MotionEvent event)// 处理事件
public boolean onTouchEvent(MotionEvent event)

2. 完整的事件分发流程

Activity.dispatchTouchEvent()
    ↓
ViewGroup.dispatchTouchEvent()
    ↓
ViewGroup.onInterceptTouchEvent() // 决定是否拦截
    ↓
View.dispatchTouchEvent()
    ↓
View.onTouchEvent()
    ↓
Activity.onTouchEvent() // 如果所有View都不处理

3. 自定义View中的事件处理

基本事件处理
public class CustomView extends View {@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 手指按下handleActionDown(event);return true; // 返回true表示消费事件case MotionEvent.ACTION_MOVE:// 手指移动handleActionMove(event);return true;case MotionEvent.ACTION_UP:// 手指抬起handleActionUp(event);return true;}return super.onTouchEvent(event);}private void handleActionDown(MotionEvent event) {// 记录起始位置mStartX = event.getX();mStartY = event.getY();}private void handleActionMove(MotionEvent event) {// 计算移动距离float deltaX = event.getX() - mStartX;float deltaY = event.getY() - mStartY;// 执行相应的操作performMove(deltaX, deltaY);}private void handleActionUp(MotionEvent event) {// 完成操作performAction();}
}
自定义ViewGroup的事件处理
public class CustomViewGroup extends ViewGroup {@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 记录初始触摸点mInitialTouchX = event.getX();mInitialTouchY = event.getY();break;case MotionEvent.ACTION_MOVE:// 计算移动距离float deltaX = Math.abs(event.getX() - mInitialTouchX);float deltaY = Math.abs(event.getY() - mInitialTouchY);// 如果水平移动距离大于阈值,拦截事件if (deltaX > mTouchSlop && deltaX > deltaY) {return true; // 拦截事件,自己处理}break;}return super.onInterceptTouchEvent(event);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:return true;case MotionEvent.ACTION_MOVE:// 处理滑动逻辑handleScroll(event);return true;case MotionEvent.ACTION_UP:// 处理释放逻辑handleRelease(event);return true;}return super.onTouchEvent(event);}
}

4. 事件分发的重要原则

返回值含义
  • true: 消费事件,事件不会继续传递
  • false: 不消费事件,事件继续向下传递
拦截机制
  • onInterceptTouchEvent() 只在ViewGroup中存在
  • 返回true表示拦截子View的事件
  • 拦截后,子View不会再收到后续事件

5. 实际应用示例

拖拽View的实现
public class DraggableImageView extends ImageView {private float mLastTouchX;private float mLastTouchY;private boolean mIsDragging = false;@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mLastTouchX = event.getX();mLastTouchY = event.getY();mIsDragging = false;return true;case MotionEvent.ACTION_MOVE:float deltaX = event.getX() - mLastTouchX;float deltaY = event.getY() - mLastTouchY;// 判断是否开始拖拽if (!mIsDragging && (Math.abs(deltaX) > 10 || Math.abs(deltaY) > 10)) {mIsDragging = true;}if (mIsDragging) {// 移动ViewsetTranslationX(getTranslationX() + deltaX);setTranslationY(getTranslationY() + deltaY);}mLastTouchX = event.getX();mLastTouchY = event.getY();return true;case MotionEvent.ACTION_UP:if (!mIsDragging) {// 执行点击事件performClick();}mIsDragging = false;return true;}return super.onTouchEvent(event);}
}

6. 调试技巧

@Override
public boolean dispatchTouchEvent(MotionEvent event) {Log.d("TouchEvent", "dispatchTouchEvent: " + event.getAction());boolean result = super.dispatchTouchEvent(event);Log.d("TouchEvent", "dispatchTouchEvent result: " + result);return result;
}@Override
public boolean onTouchEvent(MotionEvent event) {Log.d("TouchEvent", "onTouchEvent: " + event.getAction());boolean result = super.onTouchEvent(event);Log.d("TouchEvent", "onTouchEvent result: " + result);return result;
}

总结

Android事件分发机制的核心要点:

  1. 事件流向: Activity → ViewGroup → View
  1. 拦截机制: ViewGroup可以通过onInterceptTouchEvent拦截事件
  1. 消费机制: 返回true表示消费事件,false表示继续传递
  1. 责任链模式: 每个层级都有机会处理事件
  1. 触摸事件类型: ACTION_DOWN、ACTION_MOVE、ACTION_UP

理解这个流程对于开发自定义View和复杂交互非常重要。

 下一篇: Android事件分发机制完整总结-CSDN博客

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

相关文章:

  • 网站专题模板电商运营公司排名
  • 网站靠什么网站运营课程
  • 网站备案核实单网站排名优化软件哪家好
  • 海外网站搭建企业网站设计
  • 快盘做网站服务器企业网站模板html
  • 网站建设正文字体多大合适南宁seo推广
  • 波哥昆明网站建设百度有哪些app产品
  • 织梦学校网站模板大数据
  • 房产中介网站建设进度成都网站快速优化排名
  • php做动态网站建设百度引流平台
  • 网站添加站长统计代码如何开发一个软件平台
  • 垂直网站建设步骤松原头条新闻今日新闻最新
  • 网站移动适配怎么做今日头条官方正版
  • 哪里有专门做gif的网站seo研究中心官网
  • wordpress当前在线西安seo专员
  • 大型b2b网站有哪些百度seo是什么意思呢
  • 网站建设中的端口会计培训机构
  • 如何创建自己的卡网北京网站优化平台
  • 可以在几个 网站备案网站关键词如何快速上首页
  • 建网站的设备在哪里找软件开发公司
  • 佛山网站建设 合优网上如何做广告
  • 兼职做ppt是哪个网站好百度免费收录提交入口
  • 做网站用虚拟主机好不好百度推广怎么收费的
  • 昆明网站排名优化上海十大公关公司排名
  • 做篮球网站用的背景图片网站seo怎么做
  • 个人如何做网站google商店
  • 做商城网站设计html期末大作业个人网站制作
  • 哪个b2b网站做固定排名好域名解析网站
  • 如何用用dw做网站后台浏览器网页版入口
  • 免费公网网站建设盐城seo优化