PinchImageView
Introduction: 体验最好的图片手势控件,不同分辨率无缝切换,可与 ViewPager 结合使用。
Tags:
双指缩放-双击放大-图片控制-这是一个手势体验极棒但使用简单的 ImageView 控件,实现了手势放大缩小,平移等功能。PinchImageView 继承于 ImageView,可以在所有 ImageView 可以使用的情况下使用。全部的程序仅一个类文件,没有依赖任何特殊的外部库,非常易于集成。
QQ 交流群:1011201647
Demo Video
完整 Demo 视频:http://v.youku.com/v_show/id_XMTUyOTA0NzI3Ng==.html
APK 下载:demo.apk
Demo 说明
- 手势控件与 ViewPlayer 结合,当图片不在当前页时加载一张缩略图,切换到当前页后更新成大图。
- 点击缩略图切换到大图浏览使用放大动画过渡;当返回时从大图到缩略图使用动画过渡。无论大图到状态和小图的位置都保证过渡平滑。
- 浏览超大尺寸图片时使用分片加载策略保证不 OOM。
Features
手势
- 单指滑动
- 单指滑动惯性
- 滑动触及边界停止
- 双击放大缩小
- 双击放大时双击点会尽量移动到控件中心
- 双手指手势放大缩小
- 缩放模式下可以移动图片
- 缩放模式下图片允许移动到边界之外
- 缩放模式下允许图片放大缩小超过边界尺寸
- 缩放模式下屏幕上有多于 2 个手指并且按照任意顺序抬起放下均不会引起错乱和不平滑
- 缩放模式下最后一个手指抬起如果图片处于边界之外或者尺寸过大过小会使用动画回弹到最接近的正确位置
- 回弹动画过程中允许立即通过手势进入缩放模式并且保持平滑
显示
- 允许显示任何 ImageView 能显示的内容,使用 ImageView 相同的 api 设置显示内容
- 允许任何情况下(包括手势进行中,动画进行中)替换显示内容(例如将低清图换成高清图),并且保持当前的缩放尺寸
- 允许设置矩形遮罩
扩展性
- 允许设置 click,长按事件
- 允许设置图片大小位置变化的事件监听
- 允许获得图片当前变换过后的大小以及位置
- 允许获得 PinchImageView 当前的手势状态
- 允许通过 api 为图片执行缩放移动动画
- 允许通过 api 为图片遮罩执行移动缩放动画
- 允许通过 override 设置图片的最大放大尺寸
- 允许通过 override 设置图片双击之后要放大或缩小到的比例
Quick start
1) 将 PinchImageView.java 复制到项目中
2) 在布局文件中添加如下代码,它已经能显示一张资源中的图片了:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.boycy815.pinchimageview.PinchImageView
android:id="@+id/pic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/my_pic"/>
</RelativeLayout>
2) 接下来你可以直接把它作为 ImageView 取出来使用:
//作为 ImageView 取出来
ImageView imageView = (ImageView)findViewById(R.id.pic);
//可以使用任何 ImageView 支持的方式设置图片
imageView.setImageResource(R.drawable.my_pic);
//or...
imageView.setImageBitmap(bitmap);
//or...
imageView.setImageDrawable(drawable);
//or 你还能使用第三方图片加载库加载图片,如 ImageLoader
imageLoader.displayImage("http://host.com/my_pic.jpg", imageView);
end