(转载)http://my.oschina.net/ososchina/blog/383194?fromerr=jt3IU3PP


1 2 3 dispatchTouchEvent方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发, 然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回 true 表示不继续分发,事件没有被消费。 返回 false 则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。
?
1 onTouchEvent方法用于事件的处理,返回 true 表示消费处理当前事件,返回 false 则不处理,交给子控件进行继续分发。
?
1 2 3 onInterceptTouchEvent是ViewGroup中才有的方法,View中没有,它的作用是负责事件的拦截,返回 true 的时候表示拦截当前事件, 不继续往下分发,交给自身的onTouchEvent进行处理。返回 false 则不拦截,继续往下传。这是ViewGroup特有的方法, 因为ViewGroup中可能还有子View,而在Android中View中是不能再包含子View的(iOS可以)。

---------------------------------viewPager嵌套问题的处理---------------------------------------

?
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 package  com.lwj.app.customview;   import  android.content.Context; import  android.graphics.PointF; import  android.support.v4.view.ViewPager; import  android.util.AttributeSet; import  android.view.MotionEvent;   public  class  ChildViewPager  extends  ViewPager{      /** 触摸时按下的点 **/      PointF downP =  new  PointF();      /** 触摸时当前的点 **/      PointF curP =  new  PointF();      OnSingleTouchListener onSingleTouchListener;         public  ChildViewPager(Context context, AttributeSet attrs) {          super (context, attrs);          // TODO Auto-generated constructor stub      }         public  ChildViewPager(Context context) {          super (context);          // TODO Auto-generated constructor stub      }         @Override      public  boolean  onTouchEvent(MotionEvent arg0) {          // TODO Auto-generated method stub          //每次进行onTouch事件都记录当前的按下的坐标          if (getChildCount()<= 1 )          {            return  super .onTouchEvent(arg0);          }          curP.x = arg0.getX();          curP.y = arg0.getY();             if (arg0.getAction() == MotionEvent.ACTION_DOWN)          {                        //记录按下时候的坐标              //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变              downP.x = arg0.getX();              downP.y = arg0.getY();              //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰              getParent().requestDisallowInterceptTouchEvent( true );          }             if (arg0.getAction() == MotionEvent.ACTION_MOVE){              //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰              getParent().requestDisallowInterceptTouchEvent( true );          }             if (arg0.getAction() == MotionEvent.ACTION_UP || arg0.getAction() == MotionEvent.ACTION_CANCEL){              //在up时判断是否按下和松手的坐标为一个点              //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick              getParent().requestDisallowInterceptTouchEvent( false );              if (downP.x==curP.x && downP.y==curP.y){                               return  true ;              }          }           super .onTouchEvent(arg0);  //注意这句不能 return super.onTouchEvent(arg0); 否则触发parent滑动          return  true ;      }       }

更多相关文章

  1. Android学习之 使用依赖注入函数库Roboguice
  2. 一些摘抄
  3. android中JSON数据的读写方法
  4. Android(安卓)之窗口小部件高级篇--App Widget 之 RemoteViews
  5. Android(安卓)RecyclerView使用详解
  6. 在EditText中插入表情图片 (CharacterStyle&SpannableString)
  7. Android(安卓)触摸事件大全
  8. Android中使用google Analytics
  9. SQLite数据库(2):ANDROID工程中的使用

随机推荐

  1. Android之音量调节
  2. Android应用程序——四大组件之Activity
  3. 前端和Android / IOS 对接问题
  4. Android坐标系、视图坐标系与触控事件(Mot
  5. Android技术栈
  6. [Android] [Java] 分享 Process 执行命令
  7. Android 连接tomcat模拟登陆账号
  8. Android Wi-Fi工作原理
  9. Android(安卓)代码混淆(二)
  10. android listview 上下边缘的模糊去掉