我正在通過setOnLongClickListener()偵聽View的長按事件。我可以改變長時間點擊延遲/持續時間嗎?更改長點擊延遲
Q
更改長點擊延遲
14
A
回答
13
AFAIK,no。它通過ViewConfiguration
上的getLongPressTimeout()
在框架中硬連接。
歡迎您處理您自己的觸摸事件並定義您自己的「長按」概念。只要確保它與用戶所期望的不會有太大的差異,並且用戶很可能會期待所有其他應用程序使用的內容,這是標準的500毫秒持續時間。
3
這是最簡單有效的解決方案,我發現這個限制:
//Define these variables at the beginning of your Activity or Fragment:
private long then;
private int longClickDuration = 5000; //for long click to trigger after 5 seconds
...
//This can be a Button, TextView, LinearLayout, etc. if desired
ImageView imageView = (ImageView) findViewById(R.id.desired_longclick_view);
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
then = (long) System.currentTimeMillis();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if ((System.currentTimeMillis() - then) > longClickDuration) {
/* Implement long click behavior here */
System.out.println("Long Click has happened!");
return false;
} else {
/* Implement short click behavior here or do nothing */
System.out.println("Short Click has happened...");
return false;
}
}
return true;
}
});
11
這是我設定的時間段的方式來長按
private int longClickDuration = 3000;
private boolean isLongPress = false;
numEquipeCheat.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isLongPress = true;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isLongPress) {
Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(100);
// set your code here
// Don't forgot to add <uses-permission android:name="android.permission.VIBRATE" /> to vibrate.
}
}
}, longClickDuration);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
isLongPress = false;
}
return true;
}
});
2
這是我使用。這與Cumulo Nimbus的答案類似,有兩個顯着差異。
- 對於停機時間和當前時間使用已存儲的事件值。除了不重複工作之外,這樣做的好處是可以使偵聽器可以同時用於多個視圖,而無需跟蹤每個單獨事件的開始時間。
- 檢查
view.isPressed
以確保用戶在觸摸事件期間沒有離開視圖。這模仿onClick
和onLongClick
的默認系統行爲。
long longPressTimeout = 2000;
@Override
public boolean onTouch(View view, MotionEvent event) {
if (view.isPressed() && event.getAction() == MotionEvent.ACTION_UP) {
long eventDuration = event.getEventTime() - event.getDownTime();
if (eventDuration > longPressTimeout) {
onLongClick(view);
} else {
onClick(view);
}
}
return false;
}
如果視圖通常不會點擊你需要調用view.setClickable(true)
爲view.isPressed()
檢查工作。
相關問題
- 1. UIImageView圖像更改延遲時點擊
- 2. 如何更改kendo ui單擊延遲
- 3. 更長的launchimage延遲?
- 4. 延遲更改css
- 5. 延遲點擊事件
- 6. Jquery點擊自動延遲?
- 7. JQuery Tooltipster延遲點擊
- 8. 延遲的鏈路點擊
- 9. 延遲上(「點擊」)事件
- 10. 轉換原點更改延遲
- 11. 更改CCAnimation中的延遲
- 12. 使用sqlalchemy延遲更改
- 13. JQuery延遲更改「this」
- 14. 延遲更改顏色
- 15. 更改scheduleWithFixedDelay延遲(Java)
- 16. Salesforce網站更改延遲
- 17. Swift Mailer長延遲
- 18. iOS上的離子點擊延遲
- 19. UIWebView用戶交互(點擊)延遲
- 20. jQuery延遲點擊後「複製」文本
- 21. jQuery Cycle:延遲「點擊暫停」
- 22. 延遲綁定點擊執行
- 23. 延遲點擊幻燈片動畫
- 24. 的Android - 延遲點擊ListView中
- 25. jQuery:延遲淡出,除非點擊?
- 26. Wow.js延遲不起作用點擊
- 27. CSS3採集/ Zepto toggleClass點擊延遲
- 28. iOS Standalone App 300ms點擊延遲
- 29. 模擬按鈕點擊延遲
- 30. 延遲JQuery點擊監聽器
你將如何去定義自己的長點擊概念? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-03-31 19:34:17
謝謝,我想我現在會堅持默認。 – fhucho 2012-03-31 19:58:13
@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz可能通過重寫View。酷的用戶名順便說一句;-) – fhucho 2012-03-31 19:59:44