Android图片预览框架PhotoViewer

tech2025-03-16  9

官网,官网使用Kotlin写的,刚开始没有找到Java版本的相关资料,简单解释一下 点击多张图片(类似微信朋友圈查看图片)官网

PhotoViewer .setData(图片链接List<String>) .setCurrentPage(现在是哪页) .setImgContainer(img的容器 rv/gv/lv) .setShowImageViewInterface(object : PhotoViewer.ShowImageViewInterface { override fun show(iv: ImageView, url: String) { // 设置自己加载图片的框架来加载图片 Glide.with(iv.context).load(url).into(iv) } }) .setOnLongClickListener(object : OnLongClickListener{ override fun onLongClick(view: View) { // 长按图片的逻辑 } }) .start(this)

Java版本使用

PhotoViewer.INSTANCE //设置图片数据 .setData(imagesUris) //设置当前位置 .setCurrentPage(index) //设置图片控件容器 //他需要容器的目的是 //显示缩放动画 .setImgContainer(rv) //设置图片加载回调 .setShowImageViewInterface((imageView, url) -> { //使用Glide显示图片 Glide.with(getMainActivity()) .load(url) .into(imageView); }) //启动界面 .start(this);

只点击一张图片时(类似点击查看头像)

PhotoViewer .setClickSingleImg(url, iv) //因为本框架不参与加载图片,所以还是要写回调方法 .setShowImageViewInterface(object : PhotoViewer.ShowImageViewInterface { override fun show(iv: ImageView, url: String) { Glide.with(iv.context).load(url).into(iv) } }) .start(this)

Java版本使用

PhotoViewer.INSTANCE .setClickSingleImg(imageUris,rv) .setShowImageViewInterface((imageView, url) -> { //使用Glide显示图片 Glide.with(AuditInvoiceDetailActivity.this) .load(imageUris) .into(imageView); }).start(this);

添加依赖

//类似微信图片预览框架 //https://github.com/wanglu1209/PhotoViewer implementation 'com.github.wanglu1209:PhotoViewer:0.50'

PhotoViewer流程比较多,简单介绍下在单层RecyclerView中使用 自定义监听

/** * 动态监听器 */ public interface ImageListener { /** * 点击了动态图片回调 * * @param rv * @param imageUris * @param index */ void onImageClick(ImageView rv, String imageUris); }

设置监听

/** * 图片适配器 */ public class ImageCAdapter extends BaseQuickAdapter<String, BaseViewHolder> { /** * 动态监听器 */ private final ImageListener imageListener; /** * 构造方法 * * @param layoutResId */ public ImageCAdapter(int layoutResId,ImageListener imageListener) { super(layoutResId); this.imageListener=imageListener; } /** * 绑定数据 * * @param helper * @param data */ @Override protected void convert(@NonNull BaseViewHolder helper, String data) { //找图片控件 ImageView iv_banner = helper.getView(R.id.iv_banner); iv_banner.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { imageListener.onImageClick(iv_banner,data); } }); //显示图片 ImageUtil.show(mContext, iv_banner, data); } }

回调处理

@Override public void onImageClick(ImageView rv, String imageUris) { PhotoViewer.INSTANCE .setClickSingleImg(imageUris,rv) .setShowImageViewInterface((imageView, url) -> { //使用Glide显示图片 Glide.with(AuditInvoiceDetailActivity.this) .load(imageUris) .into(imageView); }).start(this); }

预览单张图片 自定义监听和之前的一样

/** * 动态监听器 */ public interface ImageListener { /** * 点击了动态图片回调 * * @param rv * @param imageUris * @param index */ void onImageClick(ImageView rv, String imageUris); }

Activity中创建ImageListener

ImageListener imageListener;

实例化对象

imageListener=this;

设置监听 iv是ImageView控件,第二个变量是图片地址

iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { imageListener.onImageClick(iv,""); } });

回调处理

@Override public void onImageClick(ImageView rv, String imageUris, int index) { PhotoViewer.INSTANCE .setClickSingleImg(imageUris,rv) .setShowImageViewInterface((imageView, url) -> { //使用Glide显示图片 Glide.with(QuestionMarkActivity.this) .load(imageUris) .into(imageView); }).start(this); }
最新回复(0)