Android---Touch事件的传递机制 & Viewpager和View的事件相应规则
一、Touch事件的传递机制
二、viewpager和view的事件响应规则
1. 当滑动很慢并且滑动很短距离的时候,viewpager和view的事件全部执行
2. 当滑动很快并且滑动较长的距离或者切换的界面的时候,会执行view的Cancel事件,结束掉view的所有事件,会只执行viewpager的事件
public
boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {case MotionEvent.ACTION_DOWN://getParent() : 获取控件的父控件getParent().requestDisallowInterceptTouchEvent(true); //设置是否父控件拦截事件,true:传递事件,false:拦截事件startX = (int) ev.getX();startY = (int) ev.getY();break;}
三、Viewpager和内部嵌套的View的事件交互规则
//1,按下事件作用在内部view上
//2,当滑动稍许距离,加速度未达到一定值时,对应滑动事件作用在view身上
//3,当滑动达到一定距离,并且加速度达到一定值,(比如翻页 切换界面)内部的view触发cancel事件,然后将滑动的事件返还给父控件(ViewPager)
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = View.inflate(getApplicationContext(),R.layout.item,null);
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
Log.i(tag, "view MotionEvent.ACTION_UP");
break;
case MotionEvent.ACTION_DOWN:
Log.i(tag, "view MotionEvent.ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.i(tag, "view MotionEvent.ACTION_MOVE");
break;
case MotionEvent.ACTION_CANCEL:
Log.i(tag, "view MotionEvent.ACTION_CANCEL");
break;
}
return true;
}
});
container.addView(view);
return view;
}