自定义View(四) Graphics2D 实现动态效果

时间:2022-05-16 12:04:16

自定义动画的动态包括两个方面

  1. 让动画动起来 (这类动画可以通过周期行重画实现)
  2. 实现和用户的互动

在绘图的整个过程中,经常会使用到双缓存技术,这是一项挺重要的技术,,为什么这么说呢?

  1. 能提高绘图的效率
  2. 实现绘图的过程和结果分离

⚠️ 理解和掌握双缓存技术事掌握Graphics2D技术的重要因素



上一篇博客《自定义View(三)》中一直在ImageView上进行绘图,当然这只是暂时性的,我们自定义View,肯定要在定义的继承自View的类中(只是一种)。重写onDraw() 方法,进行绘图,


将要介绍的里面的重要的方法–>invalidate()

方法 作用
invalidate() 重绘整个视图区域
invalidate(int I ,int taint r, int b) 表示重绘制定区域
invalidate(Rect rect) 同上

invalidate()方法只能在UI线程中调用,要是在子线程中将使用另一组方法postInvalidate()

postInvalidate()

方法 作用
postInvalidate() 在子线程中刷新组件
postInvalidate(int left ,int top, int right, int bottom) 同上

坐标转换

坐标一般画布的坐标原点就是左上角,左负右正,上负下证,但是通过Canvas提供的方法可以对坐标进行转换,转换的主要方式有四种:
平移、旋转、缩放、拉斜

平移 —> translate(float dx, float dy)

在当前原点的基础上水平评议dx个距离,垂直平移dy个距离,正负符号决定方向 ,这时,坐标移动后新的坐标系将时整个参考坐标
自定义View(四) Graphics2D 实现动态效果

旋转 —> rotate(float degrees)

将画布的坐标以当前原点为中心旋转指定的角度,正负决定旋转的方向
自定义View(四) Graphics2D 实现动态效果

方法 作用
rotate(float degrees, float px, float py) 以(px,py)为原心,旋转degrees角度,正负决定旋转方向

缩放—> scale()

方法 作用
scale(float sx, float sy) sx,sy分别时x轴和y轴方向上的缩放比例,小于1,缩小,等于1,不变,大于1,放大,最主要的是画布缩放之后画布上的所有组件都会缩放
scale(float sx, float sy,float px,float py) 以(px,py)为愿心进行缩放画布

拉斜 —>skew()

方法 作用
skew(float sx, float sy) sx,sy分别时x轴和y轴方向上拉斜的一定角度,sx为x方向倾斜角度的tan值,sy为y轴方向倾斜角度的tan值,

坐标转换后,后面的图形绘制功能跟随新坐标,转换前已经绘制的图形不会有任何的变化,为了能恢复坐标变化之前的状态,Canvas定义保存现场和恢复现场

方法 作用
save() 保存现场
restore() 回复现场到save()执行之前的状态

今天先记录到这里 ,要去写一个Demo了