图片预览组件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'}

如何使用

  1. 启动一个简单的图片预览页面(使用详情请看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!!)
  1. 如何自定义预览页面

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图片预览的开源库,几乎百分百还原微信的图片预览。相关推荐

  1. Android 主题换肤的开源库

    Android 主题换肤的开源库(插件化换肤) 新增夜间模式的简洁实现方式,不需要再去单独创建一个皮肤包(目前处于beta版本) 夜间模式实现方式 前提条件还是每个使用到的资源必须是引用的,不能是具体 ...

  2. 【ABTest】一款简单易用的ABTest开源库

    Github : https://github.com/TJHello/ABTest Gitee: https://gitee.com/TJHello/ABTest ABTest 一款简单易用的ABT ...

  3. Android好用的第三方开源库

    记录一些对工作学习有帮助的第三方开源库 快捷入口 音频类 AudioPlay Banner类 banner 流式布局 FlowLayout 网络请求框架 RxEasyHttp okhttp-RxHtt ...

  4. android导入库项目,如何在android studio项目中导入开源库?

    导入Jar文件 这种可能很常见,可以下载到别人搞好的jar包,这样可以直接在自己的主module下创建libs文件夹(我这里这样,只是为了兼容eclipse方式),然后把jar文件放进去,然后在mod ...

  5. 33 款主宰 2017 iOS 开发的开源库

    按需排列 33 个库,提升你在 2017 年的开发.开始燃烧吧. 你好,iOS 开发者们!我的名字是 Pawel,是一名 iOS 独立开发者,也是  Enter Universe 的作者. 大概在两年 ...

  6. android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...

    Vector矢量图在Android项目中的利用愈来愈广泛,但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦,首先能支持的SVG规范较少,其次操作流 ...

  7. android 图片缩放,github开源库,PhotoView 使用

    1.PhotoView,使用介绍: 支持捏合,点击放大缩小.支持在ViewPager中翻页预览图片. 2.开发集成步骤: 1)首先,在github下载源码包 连接地址:https://github.c ...

  8. css 图片换行_这个开源库教你写高级的CSS

    这个仓库名为You-need-to-know-css的开源项目简直是一个在线版的<css秘密花园>,以文档.代码和在线运行效果的形式向大家展示各种高级css效果编写技巧,极大的便利了各位前 ...

  9. Android开源项目以及开源库集合(持续更新中)

    UI Awesome-MaterialDesign – MaterialDesignCenter改名为Awesome-MaterialDesign,优化了布局,新增了不少库. awesome-andr ...

最新文章

  1. NPOI 导出Excel
  2. cvtvolor()关于HSV输出问题
  3. PHP输出表格的方法
  4. 解决ftp限制用户访问上层目录后无法登陆问题
  5. c语言入门后怎么玩,玩编程如何让人傻并快乐着?
  6. 金叉成功率_技巧!三分钟教会你识别macd真假金叉,让你精准把握买卖点!
  7. 【概率笔记】条件概率这样学才快啦
  8. 计算机网络推荐,计算机网络 | CCF推荐 | 国际会议信息4条
  9. 004Spring事务001JdbcTemplate
  10. 加壳与脱壳知识点(持续更新)
  11. 文件服务器+快照恢复,删除vmware ESXi快照文件 – 以任何方式恢复?
  12. mysql时区重启后失效_mysql时区问题
  13. 【Bus】编写一个Demo虚拟的总线-设备-驱动模型
  14. BUU-ACM国庆新人欢乐赛题解
  15. 阿里云后台部署全过程-3-mysql、supervisor初始化
  16. word的表格怎么转化成html,从WORD表格换成html.doc
  17. 万能数据库查询分析器使用技巧之(十)
  18. TI 高精度实验室《运算放大器系列--稳定性分析》
  19. 用DirectX Audio和DirectShow播放声音和音乐
  20. Adreno GPU上Android 游戏开发介绍 (2)

热门文章

  1. Windows Internals 7th: 如何快速查看当前 windows 系统版本号
  2. solr分词Analysis
  3. 浅谈JWT身份认证及其优缺点
  4. 江苏大学考研805真题C语言程序设计 第五大编程题答案2004-2019
  5. python+django高考填报志愿综合参考系统vue
  6. 电气器件系列二十七:漏电断路器开关(规格参数)
  7. Ubuntuh桌面版12.04 32bit和64bit和13.04 32bit和64bit下载地址
  8. 软件测试中怎么分析性能的好坏,软件测试中性能测试结果分析
  9. 一个七年老员工的感悟
  10. 百度涉足招聘市场:猛挖51job智联墙角