自定义动画的动态包括两个方面
- 让动画动起来 (这类动画可以通过周期行重画实现)
- 实现和用户的互动
在绘图的整个过程中,经常会使用到双缓存技术,这是一项挺重要的技术,,为什么这么说呢?
- 能提高绘图的效率
- 实现绘图的过程和结果分离
⚠️ 理解和掌握双缓存技术事掌握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个距离,正负符号决定方向 ,这时,坐标移动后新的坐标系将时整个参考坐标
旋转 —> rotate(float degrees)
将画布的坐标以当前原点为中心旋转指定的角度,正负决定旋转的方向
方法 | 作用 |
---|---|
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了