# transferee **Repository Path**: hihopeorg/transferee ## Basic Information - **Project Name**: transferee - **Description**: transferee 可以帮助你完成从缩略视图到原视图的无缝过渡转变, 优雅的浏览普通图片、长图、gif图、视频等不同格式的多媒体 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-03-16 - **Last Updated**: 2025-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Transferee **本项目是基于开源项目Transferee进行ohos化的移植和开发的,可以通过项目标签以及github地址(https://github.com/Hitomis/transferee )追踪到原项目版本** #### 项目介绍 - 项目名称: Transferee - 所属系列:ohos的第三方组件适配移植 - 功能: transferee 可以帮助你完成从缩略视图到原视图的无缝过渡转变, 优雅的浏览普通图片、长图、gif图、视频等不同格式的多媒体。 - 项目移植状态:完成 - 调用差异:无 - 项目作者和维护人: hihope - 联系方式:hihope@hoperun.com - 原项目Doc地址:https://github.com/Hitomis/transferee - 原项目基线版本:v1.6.1 sha1:880c2f93344e196c4b75c1d50527c9cb932a9b19 - 编程语言:Java - 外部库依赖: 无 #### 效果展示 效果展示 #### 安装教程 方法一: 1. 编译依赖库har包transferee.har。 2. 启动 DevEco Studio,将har包导入工程目录“entry->libs”下。 3. 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下har包的引用。 ``` dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) …… } ``` 4. 在导入的har包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。 方法二: 1. 在工程的build.gradle的allprojects中,添加HAR所在的Maven仓地址 ``` repositories { maven { url 'http://106.15.92.248:8081/repository/Releases/' } } ``` 2. 在应用模块的build.gradle的dependencies闭包中,添加如下代码: ``` dependencies { implementation 'com.hitomi.tililibrary.ohos:transferee:1.0.0' implementation 'com.hitomi.tililibrary.ohos:transplant:1.0.0' } ``` #### 使用说明 ##### 配置网络权限 由于Transferee涉及到文件和网络的操作,因此需要你在config.json文件中添加以下权限 ```config.json { "permissions": [ "ohos.permission.INTERNET", "ohos.permission.GET_NETWORK_INFO", "ohos.permission.SET_NETWORK_INFO" ] } ``` ##### 基本使用 如果针对单个 ImageView 使用,将非常简单: ```java Transferee transfer = Transferee.getDefault(context); transfer.apply(TransferConfig.build() .setImageLoader(UniversalImageLoader.with(getApplicationContext())) .setSourceUrlList(SourceConfig.getMixingSourceGroup()) .create() ).show()); // 离开页面不要忘记调用 transfer.destroy(); ``` 如果你需要更多的功能,下面是 transferee 完整的使用示例: step 1: 一个页面只创建一个 transferee 示例 (建议写在 onCreate 方法中) ``` transferee = Transferee.getDefault(context); ``` step 2: 为 transferee 创建参数配置器 ```java TransferConfig config = TransferConfig.build() .setSourceImageList(sourceUrlList) // 资源 url 集合, String 格式 .setSourceUriList(sourceUriList) // 资源 uri 集合, Uri 格式 .setMissPlaceHolder(ResourceTable.Media_ic_empty_photo) // 资源加载前的占位图 .setErrorPlaceHolder(ResourceTable.Media_ic_empty_photo) // 资源加载错误后的占位图 .setProgressIndicator(new ProgressPieIndicator()) // 资源加载进度指示器, 可以实现 IProgressIndicator 扩展 .setIndexIndicator(new NumberIndexIndicator()) // 资源数量索引指示器,可以实现 IIndexIndicator 扩展 .setImageLoader(GlideImageLoader.with(getApplicationContext())) // 图片加载器,可以实现 ImageLoader 扩展 .setBackgroundColor(Color.parseColor("#000000")) // 背景色 .setCustomView(customView) // 自定义视图,将放在 transferee 的面板上 .setNowThumbnailIndex(index) // 缩略图在图组中的索引 .enableJustLoadHitPage(true) // 是否只加载当前显示在屏幕中的的资源,默认关闭 .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, ResourceTable.Id_iv_thumb) // 绑定一个 ListView, 所有绑定方法只能调用一个 ``` step 3: 显示 transferee ``` transferee.apply(config).show(); ``` step 4: 离开页面的时候需要销毁 transferee 中的资源,防止内存泄漏 (建议写在 onDestroy 方法中) ``` transferee.destroy() ``` ##### 配置说明 | 属性 | 说明 | | :--: | :--: | | sourceUrlList | 将要预览的资源 url 集合, String 格式 | | sourceUriList | 将要预览的资源 uri 集合, Uri 格式 | | nowThumbnailIndex | 缩略图在图组中的索引, 如果你绑定了 ListView 或者 RecyclerView,这个属性是必须的,否则可以忽略; 亦或可以作为打开 transferee 时指定初始化显示页面的 position | | offscreenPageLimit | 显示 transferee 时初始化加载的资源数量, 默认为1, 表示第一次加载3张(nowThumbnailIndex, nowThumbnailIndex + 1, nowThumbnailIndex - 1); 值为 2, 表示加载5张。依次类推 | | missPlaceHolder | 缺省的占位图,资源 id 格式。资源未加载完成时默认显示的图片 | | missDrawable | 缺省的占位图,Drawable 格式。资源未加载完成时默认显示的图片 | | errorPlaceHolder | 加载错误的占位图,资源 id 格式。原图加载错误时显示的图片 | | errorDrawable | 加载错误的占位图,Drawable 格式。原图加载错误时显示的图片 | | backgroundColor | transferee 显示时,transferee 背景色 | | enableHideThumb | 是否开启当 transferee 打开时,隐藏缩略图,默认开启 | | progressIndicator | 资源加载进度指示器 (默认内置 ProgressPieIndicator 和 ProgressBarIndicator)。可实现 IProgressIndicator 接口定义自己的资源加载进度指示器 | | indexIndicator | 资源索引指示器 (默认内置 CircleIndexIndicator 和 NumberIndexIndicator)。可实现 IIndexIndicator 接口定义自己的资源索引指示器 | | imageLoader | 资源加载器。可实现 ImageLoader 接口定义自己的图片加载器 | | imageId | ListContainer 的 ItemView 中的 ImageView id | | customView | 用户自定义的视图,放置在 transferee 显示后的面板之上 | | listView | 如果你是使用的 ListContainer或者 TableLayout来排列显示图片,那么需要将你的 ListContainer或者 TableLayout传入 bindListView() 方法中 | | 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 显示/关闭状态改变的监听器 | #### 版本迭代 - v1.0.0 ``` 已实现原库功能如下: - 支持Gif图预览 - 支持大长图预览 - 支持点击图片关闭 - 支持自定义页面索引指示器 - 支持自定义图片加载器[目前已经有 HosImageLoader / GlideImageLoader / PicassoImageLoader] - 支持图片保存 - 支持预览图拖动、手势旋转、手势缩放操作 - 支持视频文件预览 - 支持傻瓜式绑定 ListContainer / TableLayout / Image - 支持不绑定任何 Component, 即可启动 transferee 未实现功能如下: - 因ohos不支持RecyclerView这种混合列表,故删除了使用RecyclerView容器的相关效果,包括仿QQ朋友圈样式等; - 因ohos系统中Component的onDraw方法无法重写,导致原库中的无缝过渡动画效果无法实现; ``` #### 版权和许可信息 Copyright 2017 Vans, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -------------