ボタンを押し続けているときにリピートアクションを実装したいと思います。例:ユーザーがボタンをクリックして保持すると、ユーザーがボタンから指を離すまで、一定の間隔で何度も何度も同様のメソッドを呼び出す必要があります。ボタンを押し続けるとアンドロイドの動作が繰り返されます
答えて
これを達成するには複数の方法がありますが、ある程度遅れて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. Android:ボタンが選択、フォーカス、または押されているときにdispatchKeyEventを繰り返します。
- 3. 繰り返し接続されたコンポーネントアルゴリズム
- 4. コード内の.ajaxStopが連続的に繰り返されます
- 5. アンドロイドVideoView繰り返し
- 6. 複数回押すことなく繰り返し音を出すことができます(アンドロイド)
- 7. 電源ボタン押し続ける
- 8. キーが押されたときにjQueryキー押しイベントが繰り返し発生しますが、すべてのキーには反映されません
- 9. Kivyのボタンを押すと、ラベルが作成されます。
- 10. VS2008ツールボックスコントロールが繰り返されます
- 11. ボタンをクリックすると繰り返します。
- 12. リストビューアイテムはアンドロイドで繰り返されます
- 13. Python:forループの繰り返しを続ける
- 14. asp.netボタンは繰り返しクリックされたときにポストバックしません。
- 15. アンドロイドの間にこれが繰り返し確認されてアンドロイドになるまで
- 16. ボタンを押してジョブを繰り返し実行しようとしています
- 17. リピートボタン - 押し続けるとファンクションが機能し続ける
- 18. 数値を0.01回繰り返すと、数回繰り返した後に.0000000000000001が加算されます。
- 19. 値の繰り返しを避ける
- 20. Countストリームアナリティクスで連続して繰り返される値
- 21. アンドロイドでリストビューをスクロールしながら繰り返しアニメーションされたカスタムコントロール
- 22. Rhodes-ボタンが押されたときにアクションを作成する
- 23. あなたがボタンを押し続けるまでアンドロイドアプリを待ちます。
- 24. mysqlで列の値が繰り返されるレコードを返す
- 25. 繰り返しAJAXリクエストを避ける
- 26. アンドロイドでの活動を繰り返す方法は?
- 27. ボタンを押してから10分ごとにメソッドを繰り返し、別のボタンを押して終了するには
- 28. jsf ui:複数のアイテムが連続して繰り返される
- 29. タブが押されたときにテキストフィールドが繰り返す順序を選択する
- 30. 繰り返しが意図したとおりに動作しない
しかし、その私のアプリケーションの必要性。ユーザーがボタンを押している間は常にカーソルを移動したいすべてのタッチでうまくいきます。ユーザーがボタンを押している間、ちょっとしたアクションを繰り返してください。 –
@ JoxTrax:答えにあなたの視点を詳述してください。 –