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