我有一个自定义视图,如抽屉布局,有两个孩子。一个gridView,它被刷新(如drawerLayout中的listview)和另一个子节点作为内容。像抽屉布局我想要如果检测到触摸和滚动触摸处理自定义布局(调用onTouchEvent()),但如果触摸是一个点击gridView项目gridView处理它。所以我想要iterceptTouchEvent()并使用GestureDEtector来检测滚动,但那不起作用。
@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);
}
}
答案 0 :(得分:0)
你正在做的事情是复杂的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()
或getHistoricalY()
与getX()
或{{进行比较在getY()
中1}},因此您将了解原始触摸点与当前触摸点之间的差异