3

Android ビューの場合、 に戻るtrueonTouchEvent、現在のジェスチャのイベントを引き続き受信する必要があることを意味します。返された場合false、現在のジェスチャのイベントをこれ以上処理しないでください

ただし、ジェスチャーがクリックなのかホールド/ドラッグイベントなのかを検出したいので、数ミリ秒が経過するまでtrue最初のACTION_DOWNイベントに戻り、その時点でタイムアウトしてジェスチャーをホールドとして認識します/クリックの代わりにドラッグします。

falseタイムアウトが経過したら、さらに onTouchEventsに戻りたいと思います。これにより、イベントの受信を停止し、親ビューで残りのドラッグを管理できるようになります。

ただし、最初のイベントに戻ると、その後のイベントに継続的に戻った後でも、関連するジェスチャーですべてtrueのイベントを受け取ることに気付いたようです。戻り値は最初のイベントでのみ重要なようで、その後は無視されます。false

onTouchEventジェスチャで最初のイベントを受け入れたら、受信を停止して親に渡す方法はありますか?

4

1 に答える 1

2

のブール値の戻り値はonTouchEvent、イベントが処理されたかどうかのみを示すことに注意してください。ユーザーがジェスチャの最中であっても、イベントを受け取る必要があります。

一般に、ハンドラーで必要に応じて動作を調整できます。

private boolean hasHandledGesture = false;

public boolean onTouchEvent( MotionEvent event ){

    if( !hasHandledGesture ){
        // Do your actual handling here for the first event
        return true;
    } else {
        return super.onTouchEvent( event );
    }
}

ただし、あなたの場合、setOnLongClickListenerを介して登録するハンドラーを作成する方がよいと思います。作業が楽になるだけでなく、長押しにかかる時間を OS に任せることもできます。これは、プレスの長さをシステムの残りの部分と一致させたい場合に最適な選択であり、アプリ全体のネイティブなルック アンド フィールに役立ちます。

より複雑なイベントをキャッチしたい場合は、GestureDetectorを使用して確認することをお勧めしますが、長押しを検出するだけの場合は、必要以上に複雑になる可能性があります。

于 2012-05-12T23:41:30.790 に答える