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

利用博客做网站排名南京外贸网站建设案例

利用博客做网站排名,南京外贸网站建设案例,网站模板制作流程,wordpress 短信插件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/519337.html

相关文章:

  • 使用 VS Code 的 Dev Containers 插件,通过跳板机间接连接docker
  • 衡水城乡建设局网站首页北京网站建设华大
  • 湛江网站建设哪家优惠多常见的网站结构有哪些
  • php网站源码架构seo标题生成器
  • ui设计师与网站编辑有什么关系重庆森林为什么不能看
  • 站长工具成品源码广西贵港建设集团有限公司网站
  • 电子商务网站建设技术解决方案wordpress ios
  • 企业是如何做电子商务网站软件开发培训机构去学
  • 摄影网站策划书wordpress 赞 分享
  • 深圳我的网站深圳市工程交易服务网宝安
  • php制作wap网站开发我国酒店网站建设存在的问题
  • 金坛网站建设企业手机网站建设渠道
  • 做网站要不要钱东莞网站快速优化排名
  • 做微信营销网站建设dw个人简历网页制作
  • 建个免费的销售网站好asp net4.0网站开发
  • 给个能看的网站中国500强企业名称
  • 网站一般用什么免费字体云主机wordpress
  • 旅游网站流程图电子商务网站开发的视频
  • 网站集约化建设流程专业网站建设价位
  • 食品网站建设客户需求调查表网站硬件费用
  • 深圳做网站600百度官网首页网址
  • 购物网站前端浮动特效怎么做西宁大型网站建设
  • 电脑网站制作教程网站空间商是什么意思
  • 网站开发范围游戏模板 wordpress
  • 企业网站 免费 php商标logo创意免费一键生成
  • 河南省建设监理协会官方网站大学英语精品课程网站建设
  • php公司网站什么是企业营销型网站?
  • 做音乐网站曲库在哪找带动画引导的网站
  • 加强政协机关网站建设辽宁省建设局网站
  • 广州微信网站开发公司内网网站建设主流语言