2

私は単純な Android アプリに取り組んでいます。私の要件は、

「画面上でいくつかの移動イベント (MotionEvent.ACTION_MOVE が true) の後、ユーザーが画面から指を離さずに数秒間移動を停止した場合、何らかのアクションを実行する必要があります。」

*LongPress は、ダウン イベント (MotionEvent.ACTION_DOWN) がトリガーされた後、ユーザーが何も動かないときにトリガーされるものであることを知りました。

画面内を移動した後にLongPressをトリガーする方法はありますか?

それとも、同じ機能に対して独自のリスナーを作成する必要がありますか??

どんな助けでも大歓迎です。

ありがとうございました。

4

2 に答える 2

5

アイデアはcancel、画面上で指を動かすたびにタイマーを設定することです(MotionEvent.ACTION_MOVE)。しばらくして、たとえば3秒後に移動を停止すると、タイマーコードが実行され、長押しのタスクを実行できます。しばらく移動を停止し、経過時間(3秒)前に移動を再開すると、再度新しいタイマーが設定されます。お役に立てば幸いです。

timer = new Timer();

public boolean onTouchEvent(MotionEvent event) 
{
    switch(event.getAction()) 
    {
        case MotionEvent.ACTION_DOWN:
             break;

        case MotionEvent.ACTION_MOVE:
             timer.cancel();
             timer = null;
             timer = new Timer();
             timer.schedule(new TimerTask() 
             {                  
                @Override
                public void run() {
                    // do your long press task here
                }
             }, 3000);
             break;

        case MotionEvent.ACTION_UP:
             timer.cancel();
             timer = null;
             break;
    }
    return super.onTouchEvent(event);
}
于 2012-09-11T09:30:52.070 に答える
1

私はあなたが自分でそれをしなければならないのではないかと心配しています。デフォルトの実装では、Move イベントがない場合にのみ、長押しイベントをトリガーします。

キーはで使用することSystem.getCurrentTime()ですonTouchEvent()

どのように?

onTouch()

  • Motion_DOWN イベントを探します。

    • longタッチイベントの時刻をメモ(変数に設定)します。(使用System.getCurrentTime())
    • ブール値を設定する ( isClickedtrue と言う)
    • タイマー タスクを開始します。これは x ミリ秒 (x は longClick の期間) 後に実行されisClickedます。onLongClick リスナーと考え​​てください。

--

  • Motion_UP イベントで
    • isClicked を false に設定します。

編集:重要なステップを1つ逃しました:

  • Motion_MOVE イベントで
    • タイマー タスクを再起動します (つまり、キャンセル + 開始)
于 2012-09-11T08:10:16.870 に答える