Android-обнаружение конца длительного нажатия
Я работаю на приложение, в котором пользователь должен нажать и удерживать кнопку в течение длительного времени.
Как я могу определить момент, когда пользователь: заканчивает нажатие или перемещает свое положение касания?
спасибо
4 ответов
Я думаю, что лучше всего использовать комбинацию 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;
}
}
}
эти ответы довольно сложно. onClick
С OnClickListener
по-прежнему вызывается в конце долгого нажатия, если вы возвращаетесь false
. Это самое простое место, чтобы обнаружить конец долгого нажатия.
это особенно важно знать потому, что если вы реализуете onTouch
маршрут при возвращении false
С onLongClick
(по умолчанию так и часто то, что вы хотите), свой 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 распространять событие end touch на OnClickListener
.
Я думаю onFocusChanged - для этого можно использовать прослушиватель.