Я работаю над приложением, в котором пользователю нужно долго нажать и удерживать кнопку.
Как определить момент, когда пользователь: завершает печать или перемещает свое положение касания?
Спасибо
Я работаю над приложением, в котором пользователю нужно долго нажать и удерживать кнопку.
Как определить момент, когда пользователь: завершает печать или перемещает свое положение касания?
Спасибо
Я думаю, что лучше всего использовать комбинацию 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 из OnLongClickListener. Это самое простое место, чтобы обнаружить конец долгого нажатия.
Это особенно важно знать, потому что если вы реализуете маршрут onTouch при возврате false из onLongClick (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.
Я думаю, вы можете использовать OnTouchListener для этого.
Я думаю, что onFocusChanged -Listener можно использовать для этого.