【发布时间】:2019-01-25 18:02:53
【问题描述】:
我有一个带有图片提要(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?
感谢和抱歉我的英语!
【问题讨论】:
-
使用 Handler 触发显示对话框。
-
@Toris 什么?,为什么?谢谢
-
我重新阅读了这个问题并更新了我的答案。请忘记处理程序。 ACTION_DOWN 或 ACTION_MOVE 不会被发送到对话框,因为用户还没有触摸对话框。在长按后从屏幕上松开手指之前,第一个视图(itemView)将继续跟踪触摸事件。因此,itemView 应该在用户触摸对话框之前调整缩放。
标签: android ontouchlistener onlongclicklistener