1

を実装するクラスがありますScaleGestureDetector.OnScaleGestureListener。Android 4.1 以前を実行しているデバイスでは、(OnScaleBegin, OnScale, and OnScaleEnd)ほぼ 2 本の指でスワイプするたびにメソッドが呼び出されます。パンとズーム (スケーリング) 機能の両方に 2 本の指のスワイプを使用するので、これは便利でした。で を使用してcurrentSpanScaleGestureDetectorユーザーがパンまたはズームを意図しているかどうかを判断します。Android 4.2 の時点では、OnScale... メソッドは、ポインター間のスパンの変化が OS によって決定されたしきい値を超えた場合にのみ呼び出されるようです。

他の人はこれを見ていますか?OS によって決定されたしきい値を操作する方法はありますか?

他のGestureDetectorオプションは、単一ポインター イベントにのみ応答します。4.2 と 4.2 より前の OS バージョンの両方をサポートする方法でマルチポインター移動イベントを検出するためのベスト プラクティスはありますか?

4

1 に答える 1

0

最終的に、ScaleGestureDetectorズーム機能を使用し、ビューのonTouchEvent()パンを処理する条件を使用することにしました。パンを防ぐためにズームしているときにフラグを設定します。以下に含まれるコードの抜粋。ズームとパンを同時に行うことができたときほど滑らかではありませんが、それは私が一緒に暮らすことができるソリューションです.

----ビュークラス内----

ScaleListener zoomListener = new ScaleListener();

public override bool OnTouchEvent(MotionEvent motion)
{
    zoomListener.onTouchEvent(motion);

    int actionMasked = motion.getActionMasked();
    if (actionMasked == MotionEvent.ACTION_MOVE && motion.getPointersDown() > 1)
    {
        if (!_zoomMode)
        {
            // If more than one pointer is involved in a move event, 
            // and zoom mode is not set, we assume that the user is panning.
            // A zoom gesture movement should be handled by the ScaleGestureDetector
            doPan();
        }
    }
}

----内部クラス----

class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
     public boolean onScale(ScaleGestureDetector detector)
     {
        setZoomMode(true);
        doZoom();
     } 

     public void onScaleEnd(ScaleGestureDetector detector)
     {
         setZoomMode(false);
     }
}
于 2013-02-07T15:55:09.917 に答える