2

今天我在 android 自定义视图上处理触摸事件时遇到了问题。在这种情况下,我创建了父视图调用 weekview 和 chiled 调用 weekdayview。我想在子视图中实现像 singleTap、LongPress 这样的触摸事件,并且当我在父视图或子视图上滑动时我想滚动父视图。当我在两个视图中实现触摸事件时它不起作用。

在此处输入图像描述

任何人都可以帮助我。这对我真的很有帮助。谢谢

4

2 回答 2

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
    }


}

这是比索代码(不是真正的 android java),向您展示使用 GestureDetector 的概念,您可以在父视图中处理来自子视图的所有事件。正如我在我的安卓手机上测试的那样,ChildView 中的 onTouchEvent 并不能很好地识别 ACTION_UP,所以即使你滑动你的 Child View,有时也无法正常工作(这取决于 ACTION_UP)。

所以如果你想在你的子视图上写更准确的滑动,最好写你的 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
     }


}
于 2012-09-12T05:50:13.803 回答
0

设置您的滑动速度(以检测用户的滑动意图)并覆盖子视图中的 onTouchEvent()。在这里,调用 super.onTouchEvent() 并返回,它调用你的父视图。处理父视图中的事件。

于 2012-09-12T05:31:08.513 回答