PhotoView

Project Url: bm-x/PhotoView
Introduction: 支持双指/双击缩放的 ImageView,支持从一个 PhotoView 缩放到另外一个 PhotoView(点击图片放大预览),相对于其他 PhototView 有更加平滑的缩放,平移的动画,并且支持所有的 ScaleType,可以作为普通的 ImageView 使用
More: Author   ReportBugs   
Tags:

一个流畅的 photoview

效果图

PhotoView PhotoView

注意

由于 facebook 的 Fresco 图片加载组件所加载出来的 drawable 图片并非真实的 drawable,无法直接获取图片真实宽高,也无法直接响应 ImageMatrix 的变换, 且根据 Fresco 文档的介绍,在后续的版本中,DraweeView 会直接继承自 View,所有暂不考虑支持 Fresco。 对于其他第三方图片加载库如 Glide,ImageLoader,xUtils 都是支持的

使用

1.Gradle 添加依赖 (推荐)

dependencies {
    compile 'com.bm.photoview:library:1.4.1'
}

(或者也可以将项目下载下来,将 Info.java 和 PhotoView.java 两个文件拷贝到你的项目中,不推荐)

2.xml 添加

 <com.bm.library.PhotoView
     android:id="@+id/img"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:scaleType="centerInside"
     android:src="@drawable/bitmap1" />

3.java 代码

PhotoView photoView = (PhotoView) findViewById(R.id.img);
// 启用图片缩放功能
photoView.enable();
// 禁用图片缩放功能 (默认为禁用,会跟普通的 ImageView 一样,缩放功能需手动调用 enable()启用)
photoView.disenable();
// 获取图片信息
Info info = photoView.getInfo();
// 从普通的 ImageView 中获取 Info
Info info = PhotoView.getImageViewInfo(ImageView);
// 从一张图片信息变化到现在的图片,用于图片点击后放大浏览,具体使用可以参照 demo 的使用
photoView.animaFrom(info);
// 从现在的图片变化到所给定的图片信息,用于图片放大后点击缩小到原来的位置,具体使用可以参照 demo 的使用
photoView.animaTo(info,new Runnable() {
       @Override
       public void run() {
           //动画完成监听
       }
   });
// 获取/设置 动画持续时间
photoView.setAnimaDuring(int during);
int d = photoView.getAnimaDuring();
// 获取/设置 最大缩放倍数
photoView.setMaxScale(float maxScale);
float maxScale = photoView.getMaxScale();
// 设置动画的插入器
photoView.setInterpolator(Interpolator interpolator);

关于

若遇到使用上的问题,请先翻看 Issues,大部分问题是已经有人提出过的。(如#9,#5)
若没找到相关的问题,可以先在 Issues 中提出,这样以便其他人遇到同样问题时可快速找到答案。
若长时间未回复,可邮件给我 bmme@vip.qq.com

版本

v1.4.0

  • 增加对普通 ImageView 的支持,可通过 PhotoView 的静态方法 getImageViewInfo(ImageView)从一个普通的 ImageView 中获取 Info,参照 ImageViewActivity
  • 添加长按事件的监听,setOnLongClickListener()
  • 提高图片缩放到屏幕边缘的情况下滑动的流畅性
  • 新增 get/setAnimaDuring() get/setMaxScale 获取设置动画的持续时间和图片最大缩放倍数
  • 通过 setInterpolator 可设置动画插入器

v1.3.6

  • 增加图片的旋转功能
  • 版本号命名改变

v2.0.7

  • 宽高属性可以设置为 wrap_content,添加对 adjustViewBounds 属性的支持
  • 修复某些情况下会闪动
  • 增加对 ScaleType.FIT_START,FIT_END 对 animaFrom 的支持

v2.0.0

  • 添加 animaTo,animaFrom 方法,支持图片点击放大缩小浏览功能
  • 添加 enable()和 disenable() 打开和关闭触摸缩放方法,默认打开 (当普通 ImageView 使用的时候建议关闭触摸缩放功能)
  • 支持所有 ScaleType 属性

v1.0

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools