写这篇文章的初衷是因为早些时候看到一款morning routine上的窗帘皱褶效果,自己也想去实现它,网上也有一些案例但是效果不太好而且没有任何的注释改动难度比较,因此想通过自己的想法去实现这个效果,让后面的人少走弯路。如下图就是我们最终想模仿实现的效果:
在开始写代码之前,我们得先了解一些两个重要的知识点:
1.Canvas方法drawBitmapMesh的使用:
Canvas提供了一个方法
drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors,int colorffset,Paint paint)
这个方法可以对bitmap进行扭曲,参数说明如下:
bitmap 需要扭曲的源位图
meshWidth 控制在横向上把该源位图划成成多少格
meshHeight 控制在纵向上把该源位图划成成多少格
verts 长度为(meshWidth + 1) * (meshHeight + 1) * 2的数组,它记录了扭曲后的位图各顶点位置
vertOffset 控制verts数组中从第几个数组元素开始才对bitmap进行扭曲
2.正弦曲线,公式&#x