5.Android 自定义view《五》 canvas变换与操作 (图片加水印)(从入门到巅峰)

一、平移(translate)

canvas中有一个函数translate()是用来实现画布平移的,画布的原状是以左上角为原点,向左是X轴正方向,向下是Y轴正方向,如下图所示

 

translate函数其实实现的相当于平移坐标系,即平移坐标系的原点的位置。translate()函数的原型如下:

 

void translate(float dx, float dy)

参数说明:

float dx:水平方向平移的距离,正数指向正方向(向右)平移的量,负数为向负方向(向左)平移的量

flaot dy:垂直方向平移的距离,正数指向正方向(向下)平移的量,负数为向负方向(向上)平移的量

--------------------- 

 

二、屏幕显示与Canvas的关系

这段代码中,同一个矩形,在画布平移前画一次,平移后再画一次,大家会觉得结果会怎样?

 

下面对上面的知识做一下总结:

1、每次调用canvas.drawXXXX系列函数来绘图进,都会产生一个全新的Canvas画布。要注意移动的变化

2、如果在DrawXXX前,调用平移、旋转等函数来对Canvas进行了操作,那么这个操作是不可逆的!每次产生的画布的最新位置都是这些操作后的位置。(关于Save()、Restore()的画布可逆问题的后面再讲)

3、在Canvas与屏幕合成时,超出屏幕范围的图像是不会显示出来的。

--------------------- 

 

三、旋转(Rotate)

 

画布的旋转是默认是围绕坐标原点来旋转的,这里容易产生错觉,看起来觉得是图片旋转了,其实我们旋转的是画布,以后在此画布上画的东西显示出来的时候全部看起来都是旋转的。其实Roate函数有两个构造函数:

 

void rotate(float degrees)

void rotate (float degrees, float px, float py)

 

第一个构造函数直接输入旋转的度数,正数是顺时针旋转,负数指逆时针旋转,它的旋转中心点是原点(0,0)

第二个构造函数除了度数以外,还可以指定旋转的中心点坐标(px,py)

--------------------- 

注意:旋转的正负和我们理解的是相反的。旋转中心是原点

 

应用demo:图片添加水印

 

画布的保存与恢复(save()、restore())

Save():每次调用Save()函数,都会把当前的画布的状态进行保存,然后放入特定的栈中;
restore():每当调用Restore()函数,就会把栈中最顶层的画布状态取出来,并按照这个状态恢复当前的画布,并在这个画布上做画。

 

调用多次;canvas.save()

 

 

调用一次Restore,不是恢复最初的状态,是恢复上一次的状态

 

 

多次调用Restore()

 

 

总结:

(save()、restore())

save()保存在特定的栈中。和activity一样。然后

restore一次,移除一个

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值