2

我有一个习惯View,我正在压倒一切onTouchEvent(MotionEvent)。我已经在这个视图中实现了捏缩放,如Make 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作为“新鲜”重新发送为. 谢谢!MotionEventACTION_DOWN

4

1 回答 1

1

您可以使用MotionEvent' 构造函数来创建一个新的。请参阅文章Android:如何创建 MotionEvent?

此外,该obtain(...)方法创建一个新的MotionEvent. 尝试MotionEvent e = MotionEvent.obtain(event);

有关更多信息,请参阅此链接obtain

于 2011-08-01T20:53:28.487 回答