今天我在android自定义视图上遇到了触摸事件处理的问题。在这种情况下,我创建了父视图调用weekview和chiled调用weekdayview.i想要实现触摸事件,如singleTap,LongPress仅在子视图中,当我滑动时父母或孩子我想滚动父视图。当我在两个视图中实现触摸事件时它不起作用。
任何人都可以帮助我。这对我很有帮助。 谢谢
答案 0 :(得分:2)
class ChildView extends View {
public void setGestureDetector (GestureDetector g)
{
gesture = g;
}
@Override
public boolean onTouchEvent (....)
{
return gesture.onTouchEvent (....); // touch event will dispatch to gesture
}
}
class ParentView extends View implements GestureDetector.OnGestureListener {
gesture = new GestureDetector (this);
child = new ChildView (...);
child.setGestureDetector (gesture);
@Override
public boolean onTouchEvent (..)
{
// handle your parent touch event here
}
public boolean onDown (...)
{
return true;
}
public boolean fling (...)
{
// here to handle child view fling
}
}
这是peso-code(不是真正的android java)向您展示使用GestureDetector的概念,您可以在父视图中处理子视图中的所有事件。当我在我的Android手机上测试时,ChildView中的onTouchEvent无法很好地识别ACTION_UP,所以即使你刷你的子视图,有时也不会使用fling(这取决于ACTION_UP)。
因此,如果您想在Child View上编写更准确的滑动,请更好地编写您的Owen Gesture Detect类,并在ChildView中执行此操作 -
float oldX;
float distanceX;
public boolean onTouchEvent (MotionEvent event...)
{
if (event.getAction == MotionEvent.ACTION_DOWN) {
// handle down
oldX = event.getX ();
}
if (event.getAction == MotionEvent.ACTION_MOVE {
// handle move
distanceX = event.getX() - oldX; // more accurate
gesture.onSwipe (distanceX); // your own gesture class
}
}
答案 1 :(得分:0)
设置滑动速度(以检测用户的滑动意图)并覆盖子视图中的onTouchEvent()。 在这里,调用super.onTouchEvent()并返回,调用父视图。处理父视图中的事件。