Transferee 让你的视图能够无缝过渡浏览

Transferee 让你的视图能够无缝过渡浏览

Android小彩虹2021-08-23 17:17:18190A+A-

transferee 可以帮助你完成从缩略视图到原视图的无缝过渡转变, 优雅的浏览普通图片、长图、gif图、视频等不同格式的多媒体。

看图直观感受一下 浏览图片:

普通图片

浏览 gif 图片

gif图片

浏览视频

视频

如果感觉大概是你想要的效果,可以点击下面链接下载 apk,上手玩一玩 demo.apk

目前 transferee 支持的功能有:

  • 支持视频预览
  • 支持 Gif 图预览
  • 支持大长图预览
  • 支持拖拽关闭
  • 支持自定义页面索引指示器
  • 支持自定义资源加载进度条
  • 支持自定义图片加载器[目前已经有 UniversalImageLoader / GlideImageLoader / PicassoImageLoader]
  • 支持图片保存
  • 支持预览图片缩放,拖动,旋转等手势操作
  • 支持傻瓜式绑定 RecyclerView / ListView / GridView / ImageView
  • 支持不绑定任何 View, 即可启动 transferee

快速添加依赖

step1.

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

step2.

// 添加所有 module  [包括 Transferee、GlideImageLoader、PicassoImageLoader、UniversalImageLoader]
implementation 'com.github.Hitomis:transferee:1.6.1'

// 单独添加核心 module Transferee, 之后至少还需要添加以下三种图片加载器中的一种
implementation 'com.github.Hitomis.transferee:Transferee:1.6.1'

// 添加 Glide 图片加载器
implementation 'com.github.Hitomis.transferee:GlideImageLoader:1.6.1'

// 添加 Picasso 图片加载器
implementation 'com.github.Hitomis.transferee:PicassoImageLoader:1.6.1'

// 添加 Universal 图片加载器
implementation 'com.github.Hitomis.transferee:UniversalImageLoader:1.6.1'

使用方式

如果针对单个 ImageView 使用,将非常简单:

// 离开页面前记得调用 transferee.destroy()
transferee.apply(TransferConfig.build()
          .setImageLoader(GlideImageLoader.with(getApplicationContext()))
          .bindImageView(sourceIv, imageUrl)
        ).show();

如果你需要更多的功能,下面是 transferee 完整的使用示例:

step 1: 一个页面只创建一个 transferee 示例 (建议写在 onCreate 方法中)

transferee = Transferee.getDefault(context);

step 2: 为 transferee 创建参数配置器

TransferConfig config = TransferConfig.build()
       .setSourceImageList(sourceUrlList) // 资源 url 集合, String 格式
       .setSourceUriList(sourceUriList) // 资源 uri 集合, Uri 格式
       .setMissPlaceHolder(R.mipmap.ic_empty_photo) // 资源加载前的占位图
       .setErrorPlaceHolder(R.mipmap.ic_empty_photo) // 资源加载错误后的占位图
       .setProgressIndicator(new ProgressPieIndicator()) // 资源加载进度指示器, 可以实现 IProgressIndicator 扩展
       .setIndexIndicator(new NumberIndexIndicator()) // 资源数量索引指示器,可以实现 IIndexIndicator 扩展
       .setImageLoader(GlideImageLoader.with(getApplicationContext())) // 图片加载器,可以实现 ImageLoader 扩展
       .setBackgroundColor(Color.parseColor("#000000")) // 背景色
       .setDuration(300) // 开启、关闭、手势拖拽关闭、显示、扩散消失等动画时长
       .setOffscreenPageLimit(2) // 第一次初始化或者切换页面时预加载资源的数量,与 justLoadHitImage 属性冲突,默认为 1
       .setCustomView(customView) // 自定义视图,将放在 transferee 的面板上
       .setNowThumbnailIndex(index) // 缩略图在图组中的索引
       .enableJustLoadHitPage(true) // 是否只加载当前显示在屏幕中的的资源,默认关闭
       .enableDragClose(true) // 是否开启下拉手势关闭,默认开启
       .enableDragHide(false) // 下拉拖拽关闭时,是否先隐藏页面上除主视图以外的其他视图,默认开启
       .enableDragPause(false) // 下拉拖拽关闭时,如果当前是视频,是否暂停播放,默认关闭
       .enableHideThumb(false) // 是否开启当 transferee 打开时,隐藏缩略图, 默认关闭
       .enableScrollingWithPageChange(false) // 是否启动列表随着页面的切换而滚动你的列表,默认关闭
       .setOnLongClickListener(new Transferee.OnTransfereeLongClickListener() { // 长按当前页面监听器
            @Override
            public void onLongClick(ImageView imageView, String imageUri, int pos) {
                saveImageFile(imageUri); // 使用 transferee.getFile(imageUri) 获取缓存文件保存,视频不支持
            }
        })
       .bindImageView(imageView, source) // 绑定一个 ImageView, 所有绑定方法只能调用一个
       .bindListView(listView, R.id.iv_thumb) // 绑定一个 ListView, 所有绑定方法只能调用一个
       .bindRecyclerView(recyclerView, R.id.iv_thumb)  // 绑定一个 RecyclerView, 所有绑定方法只能调用一个

step 3: 显示 transferee

transferee.apply(config).show();

step 4: 离开页面的时候需要销毁 transferee 中的资源,防止内存泄漏 (建议写在 onDestroy 方法中)

transferee.destroy()

配置清单

属性 说明
sourceUrlList 将要预览的资源 url 集合, String 格式
sourceUriList 将要预览的资源 uri 集合, Uri 格式
nowThumbnailIndex 缩略图在图组中的索引, 如果你绑定了 ListView 或者 RecyclerView,这个属性是必须的,否则可以忽略
offscreenPageLimit 显示 transferee 时初始化加载的资源数量, 默认为1, 表示第一次加载3张(nowThumbnailIndex, nowThumbnailIndex + 1, nowThumbnailIndex - 1); 值为 2, 表示加载5张。依次类推
missPlaceHolder 缺省的占位图,资源 id 格式。资源未加载完成时默认显示的图片
missDrawable 缺省的占位图,Drawable 格式。资源未加载完成时默认显示的图片
errorPlaceHolder 加载错误的占位图,资源 id 格式。原图加载错误时显示的图片
errorDrawable 加载错误的占位图,Drawable 格式。原图加载错误时显示的图片
backgroundColor transferee 显示时,transferee 背景色
duration 开启、关闭、手势拖拽关闭、透明度动画显示、扩散消失等动画的时长
justLoadHitPage 是否只加载当前页面中的资源。如果设置为 true,那么只有当 transferee 切换到当前页面时,才会触发当前页面的加载动作,否则按 offscreenPageLimit 所设置的数值去做预加载和当前页面的加载动作,默认关闭
enableDragClose 是否支持向下拖拽关闭,默认开启
enableDragHide 拖拽关闭时是否隐藏除主视图以外的其他 view, 默认开启
enableDragPause 拖拽关闭时是否暂停当前页面视频播放, 默认关闭
enableHideThumb 是否开启当 transferee 打开时,隐藏缩略图,默认开启
enableScrollingWithPageChange 是否启动列表随着 page 的切换而滚动,仅仅针对绑定 RecyclerView/GridView/ListView 有效, 启动之后因为列表会实时滚动,缩略图 view 将不会出现为空的现象,从而保证关闭 transferee 时为过渡关闭动画, 默认关闭
progressIndicator 资源加载进度指示器 (默认内置 ProgressPieIndicator 和 ProgressBarIndicator)。可实现 IProgressIndicator 接口定义自己的资源加载进度指示器
indexIndicator 资源索引指示器 (默认内置 CircleIndexIndicator 和 NumberIndexIndicator)。可实现 IIndexIndicator 接口定义自己的资源索引指示器
imageLoader 资源加载器。可实现 ImageLoader 接口定义自己的图片加载器
imageId RecyclerView 或者 ListView 的 ItemView 中的 ImageView id
customView 用户自定义的视图,放置在 transferee 显示后的面板之上
listView 如果你是使用的 ListView 或者 GridView 来排列显示图片,那么需要将你的 ListView 或者 GridView 传入 bindListView() 方法中
recyclerView 如果你使用的 RecyclerView 来排列显示图片,需要将 RecyclerView 传入 bindRecyclerView() 方法中
imageView 如果只想对单个 ImageView 使用此库的功能,或者界面上单个的 ImageView 是相册的封面,那么使用 bindImageView(...) 或者它的重载方法可以满足你的需求

方法说明

方法 说明
getDefault(context) 获取 transferee 实例
apply(config) 将配置参数对象应用到 transferee 实例中
show() 打开/显示 transferee
show(listener) 打开/显示 transferee,并监听显示/关闭状态
isShown() transferee 是否显示
dismiss() 关闭 transferee
clear() 清除图片和视频等所有缓存文件
destroy() 销毁 transferee 使用到的资源, 防止内存泄漏
getImageFile(url) 获取与 url 对应的缓存图片
setOnTransfereeStateChangeListener(listener) 设置 transferee 显示/关闭状态改变的监听器

如果你对项目感觉兴趣,可以点击 transferee 去 github了解更多信息

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们