转载请注明出处:http://blog.csdn.net/onlybeyond99/article/details/50680907 挨踢人one
一、事件分发 1、三个事件 dispatchEventTouch()、OnTouchEvent()、OnInterceptTouchEvent() OnInterceptTouchEvent只有容器才有普通的view和Activity 都没有 dispatchEventTouch()down,move,up事件都会调用 2、dipatchEventTouch()的传递原理: view中dispatchTouchEvent() publicbooleandispatchTouchEvent(MotionEventevent){
if(mOnTouchListener!=null&&(mViewFlags&ENABLED_MASK)==ENABLED&& mOnTouchListener.onTouch(this,event)){
returntrue; } returnonTouchEvent(event);}
viewGroup中的dispatchTouchEvent()主要方法 publicbooleandispatchTouchEvent(MotionEventev){ . . .
booleandisallowIntercept=(mGroupFlags&FLAG_DISALLOW_INTERCEPT)!=0;
if(action==MotionEvent.ACTION_DOWN){
if(disallowIntercept||!onInterceptTouchEvent(ev)){
// 如果disallowIntercept和!onInterceptTouchEvent(ev)两者有一个为true,就会进入到
//这个条件判断中。disallowIntercept是指是否禁用掉事件拦截的功能,默认是false,也可以
//通过调用requestDisallowInterceptTouchEvent方法对这个值进行修改。
代码功能:调用子控件的dipatchTouchEvent()方法。
}
} finalViewtarget=mMotionTarget;
if(target==null){
ev.setLocation(xf,yf);
if((mPrivateFlags&CANCEL_NEXT_UP_EVENT)!=0){
ev.setAction(MotionEvent.ACTION_CANCEL);
mPrivateFlags&=~CANCEL_NEXT_UP_EVENT;
}
returnsuper.dispatchTouchEvent(ev);
} //如果target为空,没有子控件消费时间,调用super.dispatchTouchEvent(ev)即view的dispatchTouchEvent() 里面包含onTouch,onClick,onTouchEvent();
view中的dipatchEventTouch()方法代码 3、Ontouch()和onTouchEvent(),onclick()点击事件 onTouch()是一个接口里面的方法。 可由setOnTouchListener()设置 onTouchEvent() 事件响应方法,属于控件里面的方法在dispatchEventTouch()方法中调用,后于onTouch() onClick点击事件()在onTouchEvent()中调用。一些控件默认有这个事件,如按钮
4、getParent().requestDisallowInterceptTouchEvent(false); 父容器不拦截事件 用途,解决下拉刷新中下拉viewPager刷新 重写viewPager的dispathTouchEvent()方法 if(y移动的距离大于x移动的距离){ getParent().requestDisallowInterceptTouchEvent(false);允许父容器拦截 returnsuper.dispatchTouchEvent(ev); 能够起作用的原理,再次调用的dispatchTouchEvent()父容器能否拦截事件的状态就变了
独学而无友,则孤陋而寡闻!分享知识,交流技术,碰撞思想。


更多相关文章

  1. Android与JS交互的细节问题
  2. Android(安卓)保存图片到Sqlite数据库
  3. Android(安卓)4.0.1_r1源代码发布,更新获取方法
  4. Android全屏(包含3种隐藏顶部状态栏及标题栏和一种隐藏Android(安
  5. 6.1.5 GridView详解编辑
  6. javah生成.h文件时提示“找不到类”的解决方法
  7. Android添加开机音乐的具体方法
  8. Android中JNI高级应用 - 本地C代码中创建Java对象及本地JNI对象
  9. 动态权限

随机推荐

  1. 总结一下Android中主题(Theme)的正确玩法
  2. android开发每日汇总【2011-8-25】
  3. 【方案汇总】Android NDK编译时版本异常
  4. 修改android statusbar颜色
  5. 第一讲Android简介与环境搭建
  6. android widget 桌面插件的简单事例讲解
  7. Android中通过typeface设置字体
  8. Android一些学习的小点
  9. Android Service 手机启动服务 监听电话
  10. Android底部菜单栏 仿微博效果