ボタンを押し続けているときにリピートアクションを実装したいと思います。例:ユーザーがボタンをクリックして保持すると、ユーザーがボタンから指を離すまで、一定の間隔で何度も何度も同様のメソッドを呼び出す必要があります。ボタンを押し続けるとアンドロイドの動作が繰り返されます
答えて
これを達成するには複数の方法がありますが、ある程度遅れてRunnable
をHandler
に投稿するのはかなり簡単です。その中で最も基本的な形ですが、それは多少のようになります。
Button button = (Button) findViewById(R.id.button);
button.setOnTouchListener(new View.OnTouchListener() {
private Handler mHandler;
@Override public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mHandler != null) return true;
mHandler = new Handler();
mHandler.postDelayed(mAction, 500);
break;
case MotionEvent.ACTION_UP:
if (mHandler == null) return true;
mHandler.removeCallbacks(mAction);
mHandler = null;
break;
}
return false;
}
Runnable mAction = new Runnable() {
@Override public void run() {
System.out.println("Performing action...");
mHandler.postDelayed(this, 500);
}
};
});
をアイデアは非常に単純です:「ダウン」のタッチアクションが発生したときにHandler
の繰り返しアクションを含むRunnable
を投稿してください。その後、「上」のタッチ操作が完了するまで、Runnable
を再度送信しないでください。 Runnable
は、タッチアップ・アクションによって削除されるまで、(「ダウン」タッチ・アクションはまだ起こっていますが)Handler
にポスティングし続けます。これが、「繰り返す」アスペクトを可能にします。
ボタンの実際の動作とそれに続くonclick/ontouchに応じて、遅れなく最初の投稿をしたいことがあります。
ユーザーがボタンを5秒間押したときに余分なことをしたい場合、そのユーザーがボタンを5秒間保持していることをどのように認識することができますか? –
もう一つの遅延した 'Runnable'を' Handler'に送ることができます。もしそれが一回限りのイベントでなければならないならば、 'Runnable'自体から再度ポストしないでください。また、ボタンが5秒以上経過する前にボタンが離されている場合は、「上へ」アクションでそれを削除することを忘れないでください。 –
ボタンエリア外のリフトがダウンしても、ハンドラが起動します。 ACTION_CANCELは、ACTION_UPでのフォールスルーとして最低限必要です。残念ながら、ボタンがスクロールビューまたはスクロール可能なウィジェットにある場合、このコードは、タッチされたウィジェットがスクリーンから離れていたり、ユーザーの指から離れていても、まだ保持されているように見せます。 –
このビューにはView.OnKeyListener
を登録できます。そのようなコールバックをデバウンスする方が良いということを考慮に入れてください。そうでない場合、メソッドが少し重い場合でもUIはスムーズになりません。
素晴らしいアイデアはありません。 onKeyDown
上のタイマーを起動して、カーソルを1ステップ移動してタイマーを再開する間隔で起動することで達成できます。その後、onKeyUp
イベントでタイマーをキャンセルすることができます。これが他のシステムで動作する方法は、通常、最初のキーを押し下げてから、ユーザーが確実にボタンを押していることを確認してから、繰り返しを少し速くすることです。キーボードは自動的に繰り返されると考えてください。これはうまくいくはずですし、uiスレッドに悪影響を及ぼすべきではありません。
なぜそれは素晴らしいアイデアではないと言いますか? – Suragch
- 1. ボタンを押し続けると、コマンドが繰り返されます
- 2. 「繰り返しの再開」のための押し続けるボタン
- 3. ボタンをクリックするとフリップアニメーションが連続して繰り返されますか?
- 4. Android:ボタンが選択、フォーカス、または押されているときにdispatchKeyEventを繰り返します。
- 5. ボタンを押すとアニメーションを繰り返す
- 6. Python:文が繰り返され続ける文
- 7. リストビューで行が繰り返され続ける
- 8. Python whileループ自体が繰り返され続ける
- 9. CMD - Enterを押すと最後のコマンドが繰り返されます
- 10. AsyncTaskがonResumeを繰り返し続けます
- 11. ジェンキンスエージェントは繰り返し切断/再接続を続けます
- 12. 繰り返し接続されたコンポーネントアルゴリズム
- 13. 繰り返し重ねられたボタンが繰り返し表示されますか?
- 14. KIVY - Pythonボタンが押されている間も続ける
- 15. コードが繰り返されないときに繰り返す
- 16. ボタンを押したときにメソッドを繰り返し呼び出す
- 17. socket.ioクライアントの接続が繰り返し切断される
- 18. コード内の.ajaxStopが連続的に繰り返されます
- 19. アンドロイドVideoView繰り返し
- 20. 複数回押すことなく繰り返し音を出すことができます(アンドロイド)
- 21. ボタンが繰り返しタップされると、UIButtonのIBActionが実行されないようにします。
- 22. テーブルビューセル繰り返しのボタン
- 23. ボタンが押されている間に関数呼び出しを繰り返すPyQt5
- 24. 電源ボタン押し続ける
- 25. Kivyのボタンを押すと、ラベルが作成されます。
- 26. アンドロイドのボタンをクリックするとリストビューが作成されます
- 27. キーが押されたときにjQueryキー押しイベントが繰り返し発生しますが、すべてのキーには反映されません
- 28. 戻るボタンを押すと、アンドロイドに空白ページが表示されます
- 29. ボタンをクリックすると、ボタンが押されたままです。
- 30. リストビューアイテムはアンドロイドで繰り返されます
しかし、その私のアプリケーションの必要性。ユーザーがボタンを押している間は常にカーソルを移動したいすべてのタッチでうまくいきます。ユーザーがボタンを押している間、ちょっとしたアクションを繰り返してください。 –
@ JoxTrax:答えにあなたの視点を詳述してください。 –