Tears_fg

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

统计

事件分发,事件消费,事件传递机制

0.学习目的:
1.解决开发中点击冲突,滑动冲突
drawerLayout点击穿透
viewpager嵌套viewpager左右滑动的时候冲突

2.深入了解Android事件机制

 

1.事件
  1.事件包括:点击,双击,长按,滑动,拖拽,多点触控,组成了Android的事件
  2.事件动作组成:
    1.ACTION_DOWN 按下事件, 所有的事件都是从按下开始的
    2.ACTION_MOVE 移动事件 ,按下后移动
    3.ACTION_UP 弹起事件, 手指离开
  3.事件的传递过程
按下(屏幕) -- 系统 --- 应用 --- activity --- viewgroup1 --- viewgroup2* .... view (没有子控件,总结的view)

 

1.为什么activity中没有onInterceptTouchEvent方法?
  activity使用来与用户进行交互的,如果事件不传递,无意义
2.为什么view中没有onInterceptTouchEvent方法
  没有包含的子控件,事件不需要传递

2.验证事件传递机制

TouchEvent的传递

 

 

 

事件拦截

 

 

1.事件 -- A dispatch --- VP dispatch ----V dispatch ---V touchEvent
1.----false--- V dispatch false --- VP toucheEvent false --- VP dispatch false --- A dispatch false
2.----true --- V dispatch true ---- VP dispatch true --- A dispatch true

view的onTouchEvent的返回值:
textview --- 返回 false
button ---- 返回true
原因: 在onTouchEvent方法里面, 如果view的clickable 为false或者 longClickAble为false,则view的onTouchEvent方法直接返回false
如何让textview可以点击,并返回true:
1.设置是否可以点击
  1.tvTest.setClickable(true);
  2.tvTest.setLongClickable(true);

 3.xml属性中设置android:Clickable = true

2.setOnclickListener方法,默认会执行tvTest.setClickable(true);
setOnLongClickListener方法,,默认会执行tvTest.setLongClickable(true);

 

.onTouch方法
1.设置触摸监听
/*触摸监听*/
btnTest.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
  Log.i("AAA", "MainActivity--button-onTouch");
  return true;
}
});

2.该方法在view的dispatchEvent方法中执行
3.返回值true表示消耗该事件,false不消耗
4.如果返回True, 不会执行onTouchEvent方法,返回false,会执行onTouchEvent方法
5.点击事件是在onTouchEvent方法中判断并调用的

6.返回为true不会执行onClick方法

 

posted on   Tears_fg  阅读(280)  评论(0编辑  收藏  举报

编辑推荐:
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
阅读排行:
· 我干了两个月的大项目,开源了!
· 推荐一款非常好用的在线 SSH 管理工具
· 千万级的大表,如何做性能调优?
· 盘点!HelloGitHub 年度热门开源项目
· Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,
点击右上角即可分享
微信分享提示