3

Androidのドキュメントの指示に従って、ScaleGestureDetectorをOnTouchListenerに接続しました。何らかの理由で、ScaleGestureDetectorはピンチジェスチャの終了を常に検出するとは限りません。これは主に、大きいものから小さいものへと速くつまむときに発生します。

その結果、両方の指を離した後、検出器はジェスチャ終了イベントを発生させません。その後、画面を1つタッチすると、スケールジェスチャが続行されていると見なされます(onScaleイベントが発生し続けます)。検出器に終了イベントを発生させるには、別のジェスチャを実行する必要があります。

OnTouchListenerにログを追加しましたが、スケールジェスチャがスタックした場合でも、1本の指を使用してevent.getPointerCount()が1の場合、モーションイベントが正常に発生します。

他のリスナーが介入しないようにしました。onTouchListenerを備えたビューは、画面上の唯一のビューではありませんが、この1つのビュー内でジェスチャを開始および終了するように非常に注意している場合にも、この効果が発生します。

終了検出を改善する方法はありますか?

または、ScaleGestureDetectorを手動でonScaleEndを起動しscaleGestureDetector.isInProgress()てfalseに変更するように設定する方法がありますか?

4

2 に答える 2

4

上記の修正を適用した後、私は解決策を思いつきました。私のアプリケーションはaScaleGestureDetectorとnormalの両方を使用しているので、(から)GestureDetector私のonScrollメソッドに実装しました。GestureDetector

if (m_dualFingerGestureDetector.isInProgress() && (evt1.getPointerCount() == 2 || evt2.getPointerCount == 2)
{
    return false;
}
...

私の変数は次のとおりです。

m_dualFingerGestureDetectorは私のScaleGestureDetector
evt1でありevt2MotionEventドラッグジェスチャのsです。イベントが1つしかない場合は、上記のコードを短くすることができます。

if (m_dualFingerGestureDetector.isInProgress() && evt.getPointerCount() == 2)
{
    return false;
}
...

これにより、非常に優れたユーザーインターフェイスを構築できます。アプリにパンとズームの機能を追加するには、ジェスチャー検出器の組み合わせを使用することを常にお勧めします。

于 2011-08-13T21:23:43.080 に答える
1

次のバグが発生している可能性があります http://code.google.com/p/android/issues/detail?id=10067

修正を適用できるように、ScaleGestureDetectorの実装をローカルプロジェクトにコピーする必要がありました。また、2.1デバイスをターゲットにしているため、プロジェクトにコピーしない限り、このクラスは利用できません。

https://android.googlesource.com/platform/frameworks/base/+/gingerbread-release/core/java/android/view/ScaleGestureDetector.java

于 2010-11-04T07:09:24.210 に答える