目标
效果仿照美图秀秀中的增高功能,主要实现图片部分区域的伸缩处理。
效果分析
从效果看,明显的是一个FrameLayout上设置2层,底层为被操作的图片,上层是要操作的选择其余。上层选好操作区域,通过接口回调把选择区域的2条高度回调给外部。而后通过配合底部的滑杆(其实就是一个进度条)传增量值进去进行对应区域的伸缩处理。
关键API
canvas.drawBitmap(Bitmap bmp,Rect rectOri,Rect rectDst,Paint paint)
简单的说明下上述API的各个参数
Bitmap bmp–要进行操作的图片对象(这里有个加载图片的细节,BitmapFactory.decodeResource(…)系列是耗时操作,如果加载的图片过大会引起OOM。)
Rect rectOri–表示的是Bitmap上要进行处理的矩形区域;
Rect rectDst–表示将上Rect的矩形区域绘制到这个矩形区域,这样就可以实现图片的局部伸缩的效果;
Paint paint–画笔(有时候也经常看到使用null,其实如果不需要类似绘制文字需要设置颜色、字体大小等属性,完全可以使用null)
小结
- 又多认识了一个API的使用方法;
- 在上层选择区域的背景、Icon以及文字显示与否都使用三元表达式替换了简单的if-else;
- 在上层滑动两参考线进行区域选择时以及最上层的对比功能,都重写了OnTouch事件,进行了事件的拦截处理(《安卓开发艺术探索》是真的没白看!!!);
- 上层的Icon本来给的是很大的,通过Matrix进行了缩放以及平移,认识了高大上的Matrix。
- 其实中间还遇到了不少坑,比如选择区域与实际屏幕图片的尺寸转换问题、滑动上层参考线时滑杆置0会调用其OnSeekBarChangeListener引起的图片骤变问题等等,坑多不怕,主要是能找到原因,一步一步解决坑也是不断学习的过程.