转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327
在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的。因此本篇文章中,我们就来对这一功能进行完善,加入点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放。
如果你还没有看过 Android瀑布流照片墙实现,体验不规则排列的美感 这篇文章,请尽量先去阅读完再来看本篇文章,因为这次的代码完全是在上次的基础上进行开发的。
那我们现在就开始动手吧,首先打开上次的PhotoWallFallsDemo项目,在里面加入一个ZoomImageView类,这个类就是用于进行大图展示和多点触控缩放的,代码如下所示:
[java] view plaincopy
- public class ZoomImageView extends View {
- /**
- * 初始化状态常量
- */
- public static final int STATUS_INIT = 1;
- /**
- * 图片放大状态常量
- */
- public static final int STATUS_ZOOM_OUT = 2;
- /**
- * 图片缩小状态常量
- */
- public static final int STATUS_ZOOM_IN = 3;
- /**
- * 图片拖动状态常量
- */
- public static final int STATUS_MOVE = 4;
- /**
- * 用于对图片进行移动和缩放变换的矩阵
- */
- private Matrix matrix = new Matrix();
- /**
- * 待展示的Bitmap对象
- */
- private Bitmap sourceBitmap;
- /**
- * 记录当前操作的状态,可选值为STATUS_INIT、STATUS_ZOOM_OUT、STATUS_ZOOM_IN和STATUS_MOVE
- */
- private int currentStatus;
- /**
- * ZoomImageView控件的宽度
- */
- private int width;
- /**
- * ZoomImageView控件的高度
- */
- private int height;
- /**
- * 记录两指同时放在屏幕上时,中心点的横坐标值
- */
- private float centerPointX;
- /**
- * 记录两指同时放在屏幕上时,中心点的纵坐标值
- */
- private float centerPointY;
- /**
- * 记录当前图片的宽度,图片被缩放时,这个值会一起变动
- */
- private float currentBitmapWidth;
- /**
- * 记录当前图片的高度,图片被缩放时,这个值会一起变动
- */
- private float currentBitmapHeight;
- /**
- * 记录上次手指移动时的横坐标
- */
- private float lastXMove = -1;
- /**
- * 记录上次手指移动时的纵坐标
- */
- private float lastYMove = -1;
- /**
- * 记录手指在横坐标方向上的移动距离
- */
- private float movedDistanceX;
- /**
- * 记录手指在纵坐标方向上的移动距离
- */
- private float movedDistanceY;
- /**
- * 记录图片在矩阵上的横向偏移值
- */
- private float totalTranslateX;
- /**
- * 记录图片在矩阵上的纵向偏移值
- */
- private float totalTranslateY;
- /**
- .relpost{clear:both}
Tag:
Freenovo 发表于2013-10-29 00:07:00 | 编辑 | 分享 0
引用地址: