Android翻页效果原理实现之模拟扭曲

本文介绍如何在Android中实现翻页效果,特别是处理图像扭曲的细节。通过drawBitmapMesh方法对位图进行扭曲操作,通过计算细分值和确定起点与顶点的移动距离来模拟弯曲效果。尽管存在精度和性能的权衡,但文章提供了简单实现的基础思路,并鼓励读者进一步优化,以达到更真实的翻页动画效果。
摘要由CSDN通过智能技术生成

尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究!

炮兵镇楼

上一节我们实现了翻页的曲线效果,但是效果有点小瑕疵不知道大家发现没有:


如图,我们发现折叠区域怪怪的,并没有实现我们之前的“弯曲”效果,为什么呢?是计算错了么?其实不是的,我们之前测试的时候使用的将canvas填色,但是这里我们用到的是一张位图,虽然我们的Path是曲线、Region有曲线区域,但是我们的Bitmap是个规规矩矩的矩形啊,怎么弯曲~怎么办呢?说起扭曲,我们首先想到的是drawBitmapMesh方法,它是我们现在了解的也是唯一的一个能对图像进行扭曲的API,而使用drawBitmapMesh方法呢我们也可以有多种思路,最简单的就是最大化恒定细分值,将图像分割成一定的网格区域,然后判断离曲线起点和顶点最近的细分线获取该区域内的细分线交点按指定方向百分比递减移动起点和顶点的距离值即可,这种方法简单粗暴,但扭曲不是很精确,正确地说精确度取决于细分,细分也大越精确当然也越耗性能,而第二种方法呢是根据曲线的起点和顶点动态生成细分值,我们可以确保在起点和顶点处都有一条细分线,这样就可以很准确地计算扭曲范围,但是我们就需要动态地去不断计算细分值相当麻烦,用哪种呢?这里鉴于时间关系还是尝试用第一种去做,首先定义宽高的细分值:

private static final int SUB_WIDTH = 19, SUB_HEIGHT = 19;// 细分值横竖各19个网格
19个网格将控件分割为20x20的网格细分线条区域,尔后我们就不需要使用drawBitmap绘制折叠区域了而是改用drawBitmapMesh。之前在讲1/6的时候有盆友多次小窗过我离屏缓冲是个什么意思需要注意什么,这里我权当演示,在绘制扭曲图像的时候使用一个单独的Bitmap并将其装载进一个额外的Canvas中:


                
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值