现在很多的APP,尤其是对于图片处理的APP,都有关于拍照完之后添加水印的功能,我之前是在大名鼎鼎的Keep上看到了这种效果,当时就觉得体验非常不错。后来过了好长时间之后,回过头来再次思考这个问题的时候发现其实就是通过操作图片的bitmap最后生成合成的图片的业务逻辑。当然,我们在本篇中不讨论如何整合bitmap,我们的重点在于实现这种类似贴纸的效果。在上篇博客中,我已经分享了关于多点触控操作图片的技术分析,在本篇博客中,也会用到这些技术。如果有不明白的朋友,可以参考一步步教你实现图片放大、平移、旋转这篇文章。
大家先看看图片效果:
image.jpg
(我去,图片这么大!)
功能列表
通过图片,我来说一下我们要做哪些事情:
触摸右上角的图片,实现单指操作图片旋转。
触摸左下角的图片,实现单指操作图片缩放。
触摸照片,实现单指平移图片功能。
双指触摸照片,实现多点操作图片缩放。
实现步骤
根据制定的功能,接下来我来说说要实现的哪些东西:
1. Matrix
我们需要利用Matrix去操作矩阵的变换,通过变换矩阵来最终改变图片。我声明了三个变量:
// 绘制图片的矩阵
private Matrix matrix;
// 手指按下时图片的矩阵
private Matrix downMatrix = new Matrix();
// 手指移动时图片的矩阵
private Matrix moveMatrix = new Matrix();复制代码
2. Bitmap
我们要操作的是Bitmap,因此我们需要声明页面上图片的bitmap变量:
// 资源图片的位图
private Bitmap srcImage;
// 资源缩放图片的位图和矩形区域
private Bitmap srcImageResize;
private Rect rectResize;
// 资源旋转图片的位图和矩形区域
private Bitmap srcImageRotate;
private Rect rectRotate;复制代码
3. PointF
由于我们需要根据一个参照点去完成缩放,旋转的操作,因此我们需要去声明两个中心点:
// 多点触屏时的中心点
private PointF midPoint = new PointF();
// 图片的中心点坐标
private PointF imageMidPoint = new PointF();复制代码
在这里&#x