5

Android のトレーニングによると、 を拡張し、からGestureDetector.SimpleOnGestureListener戻ると、他のメソッドが呼び出されることはありません。falseonDown(...)GestureDetector.SimpleOnGestureListener

GestureDetector.OnGestureListener を使用するかどうかにかかわらず、true を返す onDown() メソッドを実装することをお勧めします。これは、すべてのジェスチャが onDown() メッセージで始まるためです。GestureDetector.SimpleOnGestureListener がデフォルトで行うように、onDown() から false を返すと、システムはジェスチャの残りを無視すると想定し、GestureDetector.OnGestureListener の他のメソッドは呼び出されません。これにより、アプリで予期しない問題が発生する可能性があります。onDown() から false を返す必要があるのは、ジェスチャ全体を本当に無視したい場合だけです。

ただし、私の簡単なテストonScroll(...)では呼び出されました。

public void onCreate(Bundle savedInstanceState) {
    mDetector = new GestureDetectorCompat(this, MyGestureListener);
}


public boolean onTouchEvent(MotionEvent event) { 
    mDetector.onTouchEvent(event);
    return true;
}


class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
    private boolean scrollEvent;

    @Override
    public boolean onDown (MotionEvent event) {
        Log.v("GESTURE", "onDown ");
        return false;
    }

    @Override
    public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        Log.v("GESTURE", "onScroll");
        return true;
    }

別の同様の問題は、同じ Android トレーニング ページからの次の定義です。

個々の on メソッドからの戻り値 true は、タッチ イベントを処理したことを示します。false の戻り値は、タッチが正常に処理されるまで、ビュー スタックを介してイベントを渡します。

これは前の引用でどのように解決されますか?

4

3 に答える 3

7

onDown() から false を返す必要があるのは、ジェスチャ全体を本当に無視したい場合だけです。

それはほとんどそれをすべて言います。

ポイントは、メソッドがパラメーターとしてonDown(...)を受け取ることです。メソッドで を分析するオプションがあり、処理したくない場合は を返します。MotionEventMotionEventonDown(...)false

MotionEventは、ジェスチャの開始位置を含む多くの詳細情報が含まれています (たとえば)。処理したい領域の外側にある場合は、falseそれ以外の場合は returnを返しtrueます。

他のメソッドtrueから戻ると、呼び出されます。onDown(...)これらの各メソッドには、渡されたさまざまなパラメーターを分析および処理するオプションがあります。これらのメソッドのいずれかでイベントを処理し、それ以上のアクションが必要ない場合は、それらのメソッドから true を返します。それ以外の場合は、他のメソッドが呼び出されます (コードの実装によってはスーパー クラスで呼び出される可能性があります)。

ジェスチャーは複雑で、ダウンとアップのアクションだけでなく、あらゆる方向への動きも含まれます。ジェスチャを拒否するオプションを ( に戻ることfalseonDown(...)) 許可すると、より汎用性が高くなります。

編集:状況によっては、画面に複数のビューがある場合があります。にMotionEvent渡されるonDown(...)には、ジェスチャの開始位置に関する情報が含まれます。画面の一部の領域をジェスチャに反応させたくない場合falseは、ジェスチャの開始位置を確認したときに戻ります。

于 2014-04-17T01:06:38.827 に答える