一款Android图片预览的开源库,几乎百分百还原微信的图片预览。
图片预览组件PreviewPictureView
gihub地址:https://github.com/OneZeroYang/PreviewPictureView
几乎还原微信的图片预览,核心使用共享元素加自定义view实现
架构
PagerAdapter
viewPager2的适配器,当然也可是使用其他组件来实现
PreviewImage
整个图片预览的核心
PreviewPictureView
对图片预览进行的简单封装
PreviewTools
启动一个简单的图片预览页面工具(对图片预览简单封装的一个activity)
SimpleImagePreviewActivity
对图片预览简单封装的一个activity
TestActivity
自定义图片预览页面构建的示例
集成
Add it in your root build.gradle at the end of repositories:
allprojects {repositories {...maven { url 'https://jitpack.io' }}}
Add the dependency
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kSBw6FMc-1625032717456)(https://jitpack.io/v/OneZeroYang/PreviewPictureView.svg)]
dependencies {implementation 'com.github.OneZeroYang:PreviewPictureView:1.1.0'}
如何使用
- 启动一个简单的图片预览页面(使用详情请看
MainActivity
)
// 根据当前页面上所有的图片进行适配,这里使用的是RecyclerView来显示图片PreviewTools.startImagePreview(this, list, findViewById(R.id.mRecyclerView), i)// 根据单个图片来进行适配,推荐使用这种方法,因为在日常开发中,特别是聊天页面,RecyclerView不可能全是图片PreviewTools.startImagePreview(this, list, myHolder.image!!, i)// 进行自定义的图片预览TestActivity.start(this, i, list, myHolder.image!!)
- 如何自定义预览页面
2.1 构建图片页面的Activity
创建一个activity
,并使用指定的风格 @style/myTransparent
<activityandroid:name=".TestActivity"android:theme="@style/myTransparent"></activity>
2.2 在布局文件种加入已经封装好的支持多张图片的预览控件PreviewPictureView
,当然也可以自己去实现单张预览,或者多种预览
2.2.1 使用多张已经封装好的预览组件
在根布局下加入
加入一个view,用于改变背景的透明度
<Viewandroid:background="@color/black"android:id="@+id/view"android:layout_width="match_parent"android:layout_height="match_parent"/>
加入多图片预览组件
<com.batchat.preview.PreviewPictureViewandroid:id="@+id/mPreviewPictureView"android:layout_width="match_parent"android:layout_height="match_parent"/>
整合xml文件预览
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".TestActivity"><Viewandroid:background="@color/black"android:id="@+id/view"android:layout_width="match_parent"android:layout_height="match_parent"/><com.batchat.preview.PreviewPictureViewandroid:id="@+id/mPreviewPictureView"android:layout_width="match_parent"android:layout_height="match_parent"/></androidx.constraintlayout.widget.ConstraintLayout>
初始化控件
// 封装好的图片预览控件private var mPreviewPictureView :PreviewPictureView<String> ? =null// 初始化预览控件mPreviewPictureView=findViewById(R.id.mPreviewPictureView)
设置好所需传值
// 需要传递过来的数据private val data by lazy {intent?.getStringArrayListExtra("data")}// 需要传递过来的数据private val index by lazy {intent?.getIntExtra("index",0)}
设置好启动方法
companion object{// 启动方法,作为参考fun start(activity: AppCompatActivity,index:Int,list: ArrayList<String>,view: View){// 构建共享元素的集合,可以多个,但需要注意一一对应// 详情请看文档 https://developer.android.com/guide/navigation/navigation-animate-transitions?hl=zh-cnval mPair: Array<androidx.core.util.Pair<View, String>?> = arrayOfNulls(1)ViewCompat.setTransitionName(view, "CONTENT")mPair[0] = androidx.core.util.Pair(view, "CONTENT")val activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, *mPair)val intent = Intent(activity, TestActivity::class.java)intent.putStringArrayListExtra("data", list)intent.putExtra("index", index)// ActivityCompat是android支持库中用来适应不同android版本的ActivityCompat.startActivity(activity, intent, activityOptions.toBundle())}}
在初始化控件以后
加入以下代码
// 开始预览mPreviewPictureView?.start(index?:0,data?: arrayListOf(),this)
重写onBackPressed
方法
// 这个是必要的,因为共享元素的返回动画override fun onBackPressed() {super.onBackPressed()if (Build.VERSION.SDK_INT >= 21) {finishAfterTransition()} else {finish()}}
并实现AlphaCallback
接口用于透明度回调和预览关闭回调
// 改变透明度的动画回调override fun onChangeAlphaCallback(alpha: Float) {findViewById<View>(R.id.view).alpha=alpha}// 触发关闭的回调override fun onChangeClose() {onBackPressed()}
混淆
# PreviewPictureView
-keep class com.batchat.preview.** { *; }
注意:该组件使用了Glide图片加载,如果要使用混淆,请配置Glide混淆
一款Android图片预览的开源库,几乎百分百还原微信的图片预览。相关推荐
- Android 主题换肤的开源库
Android 主题换肤的开源库(插件化换肤) 新增夜间模式的简洁实现方式,不需要再去单独创建一个皮肤包(目前处于beta版本) 夜间模式实现方式 前提条件还是每个使用到的资源必须是引用的,不能是具体 ...
- 【ABTest】一款简单易用的ABTest开源库
Github : https://github.com/TJHello/ABTest Gitee: https://gitee.com/TJHello/ABTest ABTest 一款简单易用的ABT ...
- Android好用的第三方开源库
记录一些对工作学习有帮助的第三方开源库 快捷入口 音频类 AudioPlay Banner类 banner 流式布局 FlowLayout 网络请求框架 RxEasyHttp okhttp-RxHtt ...
- android导入库项目,如何在android studio项目中导入开源库?
导入Jar文件 这种可能很常见,可以下载到别人搞好的jar包,这样可以直接在自己的主module下创建libs文件夹(我这里这样,只是为了兼容eclipse方式),然后把jar文件放进去,然后在mod ...
- 33 款主宰 2017 iOS 开发的开源库
按需排列 33 个库,提升你在 2017 年的开发.开始燃烧吧. 你好,iOS 开发者们!我的名字是 Pawel,是一名 iOS 独立开发者,也是 Enter Universe 的作者. 大概在两年 ...
- android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...
Vector矢量图在Android项目中的利用愈来愈广泛,但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦,首先能支持的SVG规范较少,其次操作流 ...
- android 图片缩放,github开源库,PhotoView 使用
1.PhotoView,使用介绍: 支持捏合,点击放大缩小.支持在ViewPager中翻页预览图片. 2.开发集成步骤: 1)首先,在github下载源码包 连接地址:https://github.c ...
- css 图片换行_这个开源库教你写高级的CSS
这个仓库名为You-need-to-know-css的开源项目简直是一个在线版的<css秘密花园>,以文档.代码和在线运行效果的形式向大家展示各种高级css效果编写技巧,极大的便利了各位前 ...
- Android开源项目以及开源库集合(持续更新中)
UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库. awesome-andr ...
最新文章
- NPOI 导出Excel
- cvtvolor()关于HSV输出问题
- PHP输出表格的方法
- 解决ftp限制用户访问上层目录后无法登陆问题
- c语言入门后怎么玩,玩编程如何让人傻并快乐着?
- 金叉成功率_技巧!三分钟教会你识别macd真假金叉,让你精准把握买卖点!
- 【概率笔记】条件概率这样学才快啦
- 计算机网络推荐,计算机网络 | CCF推荐 | 国际会议信息4条
- 004Spring事务001JdbcTemplate
- 加壳与脱壳知识点(持续更新)
- 文件服务器+快照恢复,删除vmware ESXi快照文件 – 以任何方式恢复?
- mysql时区重启后失效_mysql时区问题
- 【Bus】编写一个Demo虚拟的总线-设备-驱动模型
- BUU-ACM国庆新人欢乐赛题解
- 阿里云后台部署全过程-3-mysql、supervisor初始化
- word的表格怎么转化成html,从WORD表格换成html.doc
- 万能数据库查询分析器使用技巧之(十)
- TI 高精度实验室《运算放大器系列--稳定性分析》
- 用DirectX Audio和DirectShow播放声音和音乐
- Adreno GPU上Android 游戏开发介绍 (2)
热门文章
- Windows Internals 7th: 如何快速查看当前 windows 系统版本号
- solr分词Analysis
- 浅谈JWT身份认证及其优缺点
- 江苏大学考研805真题C语言程序设计 第五大编程题答案2004-2019
- python+django高考填报志愿综合参考系统vue
- 电气器件系列二十七:漏电断路器开关(规格参数)
- Ubuntuh桌面版12.04 32bit和64bit和13.04 32bit和64bit下载地址
- 软件测试中怎么分析性能的好坏,软件测试中性能测试结果分析
- 一个七年老员工的感悟
- 百度涉足招聘市场:猛挖51job智联墙角