码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-09-30 21:33:40      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

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方法

 

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

标签:

原文地址:http://www.cnblogs.com/fangg/p/5924821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!