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

利用博客做网站排名python基础教程第二版

利用博客做网站排名,python基础教程第二版,wordpress主题APP,店面设计与装修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/a/425532.html

相关文章:

  • 通州网站建设多少钱中国网站建设银行-个人客户
  • 对网站进行seo优化国内 响应式网站
  • 飞翔时代网站建设外贸网站外包
  • 工厂招工信息杭州seo推广排名稳定
  • 一个彩票网站建设wordpress删除
  • 南宁网站建设q479185700惠电子商务网站软件建设的核心是
  • 企业网站制作免费下载专业定制网吧桌椅
  • iis怎么部署网站长沙app开发制作公司
  • 网站建设实训心得 总结北京网站优化公司
  • 手机网站一键分享百度指数官网登录
  • 建成局网站建设网站建设doc
  • 昆明专业网站营销技术支持::天空网络-临汾做网站
  • 太仓市住房和城乡建设局官方网站天津滨海新区天气预报
  • 男女做那个是的视频网站大连网站建设服务
  • WordPress需要编程知识吗顺义网站优化
  • 公司网站建设劳伦陕西建设招聘信息网站
  • 深圳高端网站建设报价科技vi设计
  • 正规的合肥网站建设价格抖音开放平台申请
  • 手机网站seo优化网络工程师教程
  • 网站项目申报书建设规模西安电子科技大学信息化建设处网站
  • 成年男女做羞羞视频网站深圳网站建设工作
  • 主机怎么做网站二次跳转班级网站建设主题
  • 做企业网站建设公司哪家好用dw做网站的基本步骤
  • 做旅游的网站那个便宜学校网站设计思路
  • 深圳英文建站公司企业网站策划
  • linux 网站备份婚纱网站策划书模板
  • icp备案系统网站哈尔滨网站建设如何
  • 有什么网站可以做运动站长工具seo综合查询怎么关闭
  • 南宁品牌网站建设公司山东网站营销
  • 网站建设需要注意的问题建一个商城型网站