У меня есть приложение с фидом изображений (в стиле Instagram). Я пытаюсь показать быстрый предварительный просмотр изображения с помощью длительного щелчка по изображению.
Основная идея - показывать изображение в диалоговом окне, когда пользователь делает длинный клик, затем изменять масштаб, когда пользователь перемещает палец вниз / вверх, и закрывать предварительный просмотр, когда палец отпускается.
В порядке архивации у меня есть onLongClick в адаптере фрагмента, например:
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
listener.onLongClick(item.getId());
return false;
}
});
Затем фрагмент реализует слушателя и вызывает диалог следующим образом:
@Override
public void onLongClick(long itemId) {
FullscreenPhotoPreviewDialog dialog = FullscreenPhotoPreviewDialog.newInstance(itemId);
dialog.show(getActivity().getSupportFragmentManager(), "FullscreenPhotoPreviewDialog");
}
Наконец, Dialog реализует всю логику OnTouch, чтобы пользователь мог увеличивать масштаб, не отпуская палец.
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
float scale = 0;
if (motionEvent.getHistorySize() > 0)
scale = ((motionEvent.getY() > motionEvent.getHistoricalY(motionEvent.getHistorySize() - 1)) ? 0.1f : -0.1f);
FullscreenPhotoPreviewDialog.this.applyScale(scale);
break;
case MotionEvent.ACTION_UP:
FullscreenPhotoPreviewDialog.this.dismiss();
break;
}
return true;
}
});
}
Поток открытия диалога с длинным щелчком работает нормально. Проблема в onTouch. Длительный щелчок не отправляет событие ACTION_DOWN в onTouch. Поэтому мне нужно подтянуть и снова опустить, чтобы запустить onTouch.
Есть ли способ сделать это ?. Чтобы автоматически вызывать ACTION_DOWN при длительном нажатии?
Спасибо и извините за мой английский!