Android---Touch事件的传递机制 & Viewpager和View的事件相应规则
2018-01-20 17:40
1021 查看
一、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;
}
二、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;
}
相关文章推荐
- Android事件传递机制以及ViewGroup的onInterceptTouchEvent的理解
- Android Touch事件传递机制全面解析(从WMS到View树)
- Android Touch事件传递机制全面解析(从WMS到View树)
- Android View Touch事件传递机制
- Android触摸事件传递机制及viewpager嵌套fragment冲突处理
- Android中ViewGroup到View的Touch事件的传递机制
- Android Touch事件在View层级结构中的传递机制
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouc
- Android ViewGroup中事件触发和传递机制
- android view的事件传递机制学习笔记
- 一张图让你明白Android Touch事件的传递机制
- Android View事件传递机制
- Android Touch事件传递机制
- Android TouchEvent事件传递机制
- Touch事件传递机制 Android
- Android TouchEvent事件传递机制
- Android TouchEvent事件传递机制
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- android事件传递机制,以及ondispatchEvent()、onInterceptTouchEvent()和OnTouchEvent()三个方法的作用关系