如何通过StfalconImageViewer的Overlay按钮关闭图片查看器
解决StfalconImageViewer返回按钮关闭问题
要实现back按钮关闭图片查看器的功能,你只需要先保存StfalconImageViewer的实例,然后在点击事件中调用它的dismiss()方法即可,具体步骤如下:
声明Viewer实例变量
在你的代码作用域内(比如Fragment/Activity的成员变量,或当前方法的局部变量)声明一个StfalconImageViewer对象:private StfalconImageViewer<ChatMessageBuilder> imageViewer;保存Viewer实例
调用builder.show()时,把返回的实例赋值给上面的变量:imageViewer = builder .withStartPosition(ChatMessageInterfaceFragment.imagePosition) .withHiddenStatusBar(false) .allowZooming(true) .allowSwipeToDismiss(true) .withImageChangeListener((position) -> { // 你的原有代码 }) .withBackgroundColorResource(R.color.background_light) .withTransitionFrom(messageImage) .withOverlayView(imageDetail) .show();实现back按钮点击逻辑
在back按钮的点击监听里调用dismiss()方法关闭查看器:back.setOnClickListener(v -> { if (imageViewer != null) { imageViewer.dismiss(); } });
修改后的完整代码片段
View imageDetail = activity.getLayoutInflater().inflate(R.layout.chat_image_pager, container , false); ImageView back = imageDetail.findViewById(R.id.back); TextView totalImages = imageDetail.findViewById(R.id.totalImages); TextView imagePosition = imageDetail.findViewById(R.id.mediaCounter); TextView sentDate = imageDetail.findViewById(R.id.sentDate); TextView sentBy = imageDetail.findViewById(R.id.sentBy); TextView sentTime = imageDetail.findViewById(R.id.sentTime); // 声明Viewer实例 private StfalconImageViewer<ChatMessageBuilder> imageViewer; back.setOnClickListener(v -> { if (imageViewer != null) { imageViewer.dismiss(); } }); StfalconImageViewer.Builder<ChatMessageBuilder> builder = new StfalconImageViewer.Builder<> (activity,ChatImageData.imageMessages, (imageView, image) -> { Glide.with(fragment) .load(image.getMediaAddress()) .into(imageView); }); // 其他原有代码 // 保存Viewer实例并显示 imageViewer = builder .withStartPosition(ChatMessageInterfaceFragment.imagePosition) .withHiddenStatusBar(false) .allowZooming(true) .allowSwipeToDismiss(true) .withImageChangeListener((position) -> { // 你的原有代码 }) .withBackgroundColorResource(R.color.background_light) .withTransitionFrom(messageImage) .withOverlayView(imageDetail) .show();
调用dismiss()方法后,图片查看器会执行退出动画并关闭,自动回到之前的RecyclerView界面,无需额外处理返回逻辑。
内容的提问来源于stack exchange,提问作者Ashile The Great
相关产品推荐
相关产品推荐

