回答
我認爲你最好的選擇是使用該按鈕的onLongClickListener()和onTouchListener()的組合。您需要捕捉觸摸偵聽器上的某些事件,因爲它會觸發每個觸摸事件。
嘗試類似如下:
class Blah extends Activity {
private Button mSpeak;
private boolean isSpeakButtonLongPressed = false;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.blahlayout);
Button mSpeak = (Button)findViewById(R.id.speakbutton);
mSpeak.setOnLongClickListener(speakHoldListener);
mSpeak.setOnTouchListener(speakTouchListener);
}
private View.OnLongClickListener speakHoldListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View pView) {
// Do something when your hold starts here.
isSpeakButtonLongPressed = true;
return true;
}
}
private View.OnTouchListener speakTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View pView, MotionEvent pEvent) {
pView.onTouchEvent(pEvent);
// We're only interested in when the button is released.
if (pEvent.getAction() == MotionEvent.ACTION_UP) {
// We're only interested in anything if our speak button is currently pressed.
if (isSpeakButtonLongPressed) {
// Do something when the button is released.
isSpeakButtonLongPressed = false;
}
}
return false;
}
}
}
這對我有效,謝謝! – 2014-09-08 19:36:44
謝謝約翰,很好的解決方案。 – alfdev 2015-09-14 14:06:34
當我長按按鈕時,該動作運行了兩次,我通過在onTouchListener中返回true而不是false來修復它。 – DAVIDBALAS1 2016-07-23 13:41:11
我覺得onFocusChanged章24 -listener可以用於此目的。
我認爲你可以使用OnTouchListener這個。
這些答案是相當複雜的。 onClick
從OnClickListener
仍然會在長按結束時被調用,如果您返回false
。這是檢測長按結束的最簡單的地方。
這是要知道,因爲如果實現了onTouch
路線在返回從onLongClick
false
尤其重要(默認AS給你,往往你想要的),你onClick
代碼可能在你長按結束被稱爲沒有你意識到這一點。
下面是基於捕捉的照片或視頻的例子:
private boolean takingVideo = false;
captureButton.setOnClickListener(v -> {
// onClick gets called after normal click or long click
if(takingVideo) {
saveVideo();
} else {
takePhoto();
}
});
captureButton.setOnLongClickListener(v -> {
takeVideo();
return false;
});
private void takePhoto() {
// Save the photo
}
private void takeVideo() {
takingVideo = true;
// Start capturing video
}
private void saveVideo() {
takingVideo = false;
// Save the video
}
正如你所看到的,邏輯就變得非常簡單,當你讓Android爲傳播結束觸摸事件的OnClickListener
。
- 1. Android檢測雙指長按
- 2. 上傳結束時檢測
- 3. 動態ListView Android(自動檢測結束)
- 4. Android:如何檢測滾動結束
- 5. Android - 在通話結束時檢測OutgoingCallReceiver
- 6. 檢測performSelectorInBackground結束:withObject:
- 7. 如何檢測流結束?
- 8. 檢測twitter4j的結束流
- 9. AVSpeechSynthesizer檢測結束髮言?
- 10. Javascript檢測結束視頻
- 11. 檢測結束通話PJSIP
- 12. 檢測DataInputStream流結束
- 13. Swift:檢測視頻結束
- 14. 如何檢測Window.ClientSizeChanged結束?
- 15. Php ssh檢測流結束
- 16. 如何檢測結束按鈕被按下的來電斷開
- 17. Java檢測長按鼠標
- 18. 在iPhone上檢測長按
- 19. 我如何檢測長按?
- 20. AS3:檢測長按鍵
- 21. 在UIScrollView中檢測長按
- 22. Android鈦結束()按鈕
- 23. 檢測耳機按鈕,雙擊和長按(點擊)的Android
- 24. 檢測長按UINavigationItem的後退按鈕
- 25. 檢測滾動結束在Xamarin.Forms.Scrollview
- 26. ScaleGestureDetector未檢測到手勢結束
- 27. 在TreeView上按「*」時如何檢測擴展結束?
- 28. jquery滑塊檢測滾動結束?
- 29. 在串流結束時檢測
- 30. 在滾動檢測一個PinchGesture結束
您需要解釋爲什麼用戶移動位置很重要。至於檢測長按的結束,只需使用setOnLongClickListener()。 onLongClick()方法將在用戶釋放按鈕時自動調用。 – Squonk 2011-05-31 08:06:00
這是錯誤的 - 只要檢測到長時間點擊,onLongClick方法就會被觸發 - 例如:一旦發生「長按」的超時,而不是當用戶釋放按鈕時。 – 2012-05-24 22:43:10