0

ボタンを押したときに開始したいタイマーがあり、離したときにタイマーをリセットします。onClickで可能でしたが、このプロジェクトでonTouchイベントを使用する方法を実際に理解することはできません。最初のコードスニペットは機能しましたが、クリックする代わりにタッチを実装する方法はありますか?

 @Override

    public void onClick(View v)
        {
            if (!timerHasStarted)
                {
                    countDownTimer.start();
                    timerHasStarted = true;
                    startB.setText("Start");

                }
            else
                {

                    countDownTimer.cancel();
                    timerHasStarted = false;
                    startB.setText("RESET");
                }
        }

        public boolean onTouch(View v, MotionEvent event) {

        final float mouseSensitivity = 0.5f;

        if(event.getAction()==MotionEvent.ACTION_DOWN){
            countDownTimer.start();
            timerHasStarted = true;
        } else if(event.getAction()==MotionEvent.ACTION_UP){
            countDownTimer.cancel();
            timerHasStarted = false;


        }
        return timerHasStarted; } }

public void onTouch(View v, MotionEvent event) {

       // final float mouseSensitivity = 0.5f;

        if(event.getAction()==MotionEvent.ACTION_DOWN){
            countDownTimer.start();
            timerHasStarted = true;
        } else if(event.getAction()==MotionEvent.ACTION_UP){
            countDownTimer.cancel();
            timerHasStarted = false;


        }
    }
4

1 に答える 1

0

@override アノテーションを追加して onTouch をオーバーライドしていることを確認してください。onTouch は常にブール値を返すため、2 番目の実装ではそうではありません。

他の人ではなく、タッチ コールに応答するようにしてください。ビューの onTouchListener をオブジェクトに設定するか、ビューを独自のクラスで拡張して onTouchEvent を実装します

ビューが実際に言及されたボタンであることを確認する必要があるかどうかを検討してください

また、MotionEvent.CANCEL も処理します。これは、ときどき発生するため、おそらく何かをしたいと思うでしょう。MotionEvent.MOVE が発生したときに何もしたくないのでスキップできます。

onTouch は、個人用タイマーの状態ではなく、イベントを処理するかどうかを返す必要があります。

于 2012-11-28T18:06:43.637 に答える