0

押されたときにメソッドを繰り返し実行するボタンが欲しいです。解放されると、メソッドの実行を停止する必要があります。

例: ユーザーがボタンを 5 秒間押し続けます。次に、その 5 秒間、メソッドが何度も実行されます。さらに、繰り返し呼び出されるメソッドは、ボタンがどれくらい押されているかを知る必要があります。

これが私がこれまでに持っているものです。私は使用していonTouchListenerます:

myButton.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                myButton.setText("Pressed!");
                while(myButton.isPressed()) {
                    doSomething(event);
                }
                break;  

            case MotionEvent.ACTION_UP:
                myButton.setText("Press me!");
            }
            return false;
        };

        private void doSomething(MotionEvent event) {
            // Do some calculation with the time the button is pressed so far
        }
    });

私の問題は、while-loopが正常に機能しておらず、ボタンが押された時間を取得する方法がわからないことです。もしかしてイベントで??何か案は?

4

3 に答える 3

1

aRunnableと aHandlerを使用して、メソッドを定期的に実行します。

private final int INTERVAL = 100;
private Handler handler = new Handler();
private Runnable autoRotateRunnable =  new Runnable() { 
    @Override
    public void run() {
        periodicMethod();
        schedulePeriodicMethod();
    }
};

public void schedulePeriodicMethod() {
    handler.postDelayed(runnable, INTERVAL);
}

public void stopPeriodicMethod() {
    handler.removeCallbacks(runnable);
}

あなたの切り替え方法は次のようになります.-

switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        myButton.setText("Pressed!");
        schedulePeriodicMethod();
    break;  
    case MotionEvent.ACTION_UP:
        myButton.setText("Press me!");
        stopPeriodicMethod();
    }
}

押し下げから押し上げまでの時間は、現在のDateonを保存して、 onACTION_DOWNと比較できます。DateACTION_UP

于 2013-09-23T16:05:43.157 に答える
0

ボタンタッチリスナーで

Handler m_handler;
Runnable m_handlerTask ;  
m_handler = new Handler();   
m_handlerTask = new Runnable()
{
  @Override 
  public void run() { 

    // do something  
    m_handler.postDelayed(m_handlerTask, 1000);  // 1 second repeat  

  }
  };
 m_handlerTask.run();

実行を停止するには

 m_handler.removeCallbacks(m_handlerTask);

タイマーも使えます。ただし、タイマーは別のスレッドで実行されるためrunOnUiThread、タイマーを使用する場合は ui を更新するために使用します。カウントダウンタイマーも使えます。

こちらもチェック

タイマーの Android スレッド

于 2013-09-23T16:07:24.497 に答える