如何在Android中“重启”触摸事件?

时间:2011-08-01 20:44:43

标签: android android-custom-view

我有一个自定义View,我正在覆盖onTouchEvent(MotionEvent)。我已按照文章Making Sense of Multitouch中的说明在此视图中实现了缩放缩放。我遇到的问题是这个视图最终用在需要触摸事件滚动的Gallery中。我添加了逻辑来检测我的视图何时完全向右/向左滚动并返回false,但我认为Gallery需要完整的MotionEvent动作才能滚动。这是我返回false的地方:

case MotionEvent.ACTION_MOVE: {
    final int pointerIndex = event.findPointerIndex( getActivePointerId() );
    final float x = event.getX( pointerIndex );
    final float y = event.getY( pointerIndex );

    // Only move if the ScaleGestureDetector isn't processing a gesture.
    if ( !getScaleDetector().isInProgress() ) {
        if ( isDetectMovementX() ) {
            final float dx = x - getLastTouchX();
            setPosX( getPosX() + dx );
        }

        if ( isDetectMovementY() ) {
            final float dy = y - getLastTouchY();
            setPosY( getPosY() + dy );
        }

        invalidate();
    }

    setLastTouchX( x );
    setLastTouchY( y );

    if ( isAtXBound() ) {
        return false;
    }

    break;
}

View缩放和翻译,但Gallery从不滚动。我想知道是否有办法基本上将MotionEvent重新发送为“新鲜”MotionEvent,初始操作为ACTION_DOWN。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用MotionEvent的构造函数创建一个新构造函数。请参阅文章Android: How to create a MotionEvent?

此外,obtain(...)方法会创建新的MotionEvent。试试MotionEvent e = MotionEvent.obtain(event);

有关obtain的更多信息,请参阅this link