图片的局部伸缩

本文介绍了一种模仿美图秀秀增高功能的实现方法,重点在于图片局部区域的伸缩处理。采用FrameLayout双层布局,顶层用于选择操作区域,并通过滑动条调整选定区域的高度,底层为待处理图片。利用canvas.drawBitmap方法完成局部伸缩效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

效果仿照美图秀秀中的增高功能,主要实现图片部分区域的伸缩处理。

效果分析

从效果看,明显的是一个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)

小结

  1. 又多认识了一个API的使用方法;
  2. 在上层选择区域的背景、Icon以及文字显示与否都使用三元表达式替换了简单的if-else;
  3. 在上层滑动两参考线进行区域选择时以及最上层的对比功能,都重写了OnTouch事件,进行了事件的拦截处理(《安卓开发艺术探索》是真的没白看!!!);
  4. 上层的Icon本来给的是很大的,通过Matrix进行了缩放以及平移,认识了高大上的Matrix。
  5. 其实中间还遇到了不少坑,比如选择区域与实际屏幕图片的尺寸转换问题、滑动上层参考线时滑杆置0会调用其OnSeekBarChangeListener引起的图片骤变问题等等,坑多不怕,主要是能找到原因,一步一步解决坑也是不断学习的过程.

最后附上代码:
https://github.com/Haskell2015/MeiTuXiuXiu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值