Android 在customView(如抽屉布局)中进行触摸处理
我有一个自定义视图,如抽屉布局,有两个孩子。切换的gridView(如抽屉布局中的listview)和另一个子项作为内容。像抽屉布局一样,我希望如果检测到触摸,即滚动触摸,则在自定义布局中处理它(调用onTouchEvent()),但如果触摸是点击gridView项gridView处理它。因此,我验证了iterceptouchevent()并使用了GestureDEtector来检测滚动,但这不起作用Android 在customView(如抽屉布局)中进行触摸处理,android,gridview,android-studio,touch,drawerlayout,Android,Gridview,Android Studio,Touch,Drawerlayout,我有一个自定义视图,如抽屉布局,有两个孩子。切换的gridView(如抽屉布局中的listview)和另一个子项作为内容。像抽屉布局一样,我希望如果检测到触摸,即滚动触摸,则在自定义布局中处理它(调用onTouchEvent()),但如果触摸是点击gridView项gridView处理它。因此,我验证了iterceptouchevent()并使用了GestureDEtector来检测滚动,但这不起作用 @Override public boolean onInterceptTouchEve
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
mGestureDetector.onTouchEvent(ev);
if(isScrolling) {
isScrolling = false;
onTouchEvent(ev);
}
return false;
}
public class touchDetector extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d("*********","ONScroll");
isScrolling = true;
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
您正在以一种使TouchListener复杂化的方式进行操作,您只需要:
public boolean onTouch(View v, MotionEvent event) {
int viewId = v.getId();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
switch (viewId) {
case R.id.viewId1: {
...
break;
}
case R.id.viewId2: {
...
break;
}
}
break;
}
case MotionEvent.ACTION_UP: {
switch (viewId) {
...
}
}
break;
}
}
return false;
}
因此,您可以处理特定视图的特定操作,如果您想知道用户是否正在滚动,只需将MotionEvent的
getHistoricalX()
或getHistoricalX()
与getX()
或getY()进行比较即可
在ActionDown案例中
这样您就可以知道原始接触点和当前接触点之间的区别了谢谢,但是如果onInterceptTouchEvent返回false OnTouch()方法不用于接触儿童的位置,只需将touchlistener连接到您的活动/片段