Android高级-Canvas高阶使用技巧--变换,状态保存,离屏缓冲,粒子特效

Canvas 详解

  

 今天主要将第二个,位置和形状变换

Demo

1:平移

平移之前是红色的矩形,原点位置是0,0

平移之后是灰色的矩形,原点位置是50,50 

平移是将整个画布进行平移,将原点位置平移到所设置的位置,我们验证一下,在平移后的代码中再添加一个条线

绘制结果: 平移以后,再次绘制任何东西都会从平移后的原点出发

2,缩放

代码

scale缩放是将整个画布进行一个缩放操作

运行结果

还有一个重载缩放方法

运行结果

这个方法是先执行translate (200,200)的操作,然后再进行缩放

3:旋转

运行结果

 

运行结果:

4,倾斜操作

结果===灰色的图,就是将y轴逆时针旋转45度

接着如果让y轴旋转45度:

运行结果:y轴上倾斜45度,x轴顺时针旋转45度 

5,切割

运行结果:

第一张图是注释掉//canvas.clipRect(200,200,700,700);//画布被裁剪,第二张是按照上面的执行切割,这里切割的范围就是红色正方形区域。

        

此时再画一个圆

canvas.drawCircle(300,300,100,mPaint);

运行结果:

可以在画一个圆,到灰色正方形范围,看看能不能显示

canvas.drawCircle(300,800,100,mPaint);

运行结果

再画一个介于两者之间的圆

canvas.drawCircle(300,700,100,mPaint);

反向裁剪

运行结果:

6:矩阵

结果就不看了 跟之前的平移,缩放,旋转都没有什么区别,只是之前是调用paint的api,现在改成了matrix

 

我们来尝试一下:

运行结果:

我们再让画布移动回去:

运行结果:---我们发现画布又移动回去了 

可以通过状态保存来实现反向移动:

canvas.restore();可以多次调用:

例如:

结果:===保留到了第二级

 结果:===返回了最初的状态

canvas内部维护了一个状态栈,没save一次就压入栈中,restore()就做出栈操作

我们可以通过方法来查询状态的个数:canvas.saveCount();  canvas.restoreCount();

我们还可以通过canvas.restoreToCount(int state)来直接返回某个状态,这个state=canvas.save()返回的,当我们返回的这个state为栈底的,那么上面的状态也会直接出栈。

2:使用离屏绘制保存画布状态

运行结果;==开始绘制的是红色的,然后将画布移动20,20,然后再绘制的灰色的矩形就是从(20,20),(700,700)的一个矩形,然后恢复画布,再绘制一个蓝色的矩形,我们可以发现,矩形又从(0,0)开始了

粒子代码大放送

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值