2

私には習慣がViewあり、オーバーライドしていますonTouchEvent(MotionEvent)マルチタッチの意味を理解するの記事で説明されているように、このビューでピンチズームを実装しました。私が抱えている問題は、このビューが最終的Galleryにスクロールにタッチイベントを必要とするで使用されることです。Galleryビューが右/左に完全にスクロールしてfalseを返すタイミングを検出するロジックを追加しましたが、スクロールするにはフル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 に答える