1

タイマーを使用して数値を自動減少させるボタンonLongClickListenerを Androidに実装しました。Dialogここにコードがあります

myIncreaseTimer = new Timer();
final Runnable runnable_decrease = new Runnable() {
    public void run() {
        int txt = Integer.parseInt(length.getText().toString());
        txt -= 1;
        length.setText(String.valueOf(txt));
        if (txt == 0) {
            myIncreaseTimer.cancel();
            myIncreaseTimer.purge();
            myIncreaseTimer = new Timer();
        }
    }
};
btnMinus.setOnLongClickListener(new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        myIncreaseTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(runnable_decrease);
            }
        }, 0, 300);
        return true;
    }
});

onTouchEventダイアログではなくアクティビティの中にいるときは、ユーザーが画面に触れたときに減少を止めることができます

@Override 
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        myIncreaseTimer.cancel();
        myIncreaseTimer.purge();
        myIncreaseTimer = new Timer();
    }
    return true;
}

ただし、ダイアログでこれを行うことはできません。さらに、ダイアログには onTouchEvent がありません。

onTouchEventで実装する方法、Dialogまたはの増加タイマーをどこで停止する必要があるかを知っている人はいDialogますか?

4

2 に答える 2

5

Dialog で onTouch を処理できないので、

アクティビティを作成し、それに onTouchListener を実装し、マニフェスト ファイルで

<activity android:theme="@android:style/Theme.Dialog">

これで、アクティビティは DialogBox のようになりました。

于 2011-11-08T10:24:35.810 に答える
2

Dialog は生の onTouchEvents を処理するように設計されていないためです。ダイアログのように見えるアクティビティ (透明なテーマ、タイトル バーなし) を作成し、その onTouchEvent メソッドをオーバーライドすることを検討してください。

于 2011-11-08T10:17:09.680 に答える