对Android动画中Martix和Camera的一些理解

Martix和Camera

Android动画中经常会用到Camera和Matrix类,下面是我学习中的一些理解

1.   Martix

Matrix包含一个3*3的矩阵,专门用于图像变换匹配。Matrix提供了四种操作:

translate(平移)

rotate(旋转)

scale(缩放)

skew(倾斜)

也就是说这4种操作都是对这个3 X 3的矩阵设值来达到变换的效果。下面来看一下pre、post、set的区别

1)        preXXX

(左乘)在队列最前面插入,即不管前面有几个操作,都将其插入到第一个

2)        setXXX

()先清空队列在添加(这也是上文提到的“Matrix没有结构体,它必须被初始化,通过reset或set方法”的原因)

3)        postXXX

(右乘)在队列最后面追加

例如下列代码

A->  matrix.preScale(2f,1f);                       此时的队列为:A

B->  matrix.preTranslate(5f, 0f);               此时的队列为:B A

C-> matrix.postScale(0.2f, 1f);                 此时的队列为:B A C

D->  matrix.postTranslate(0.5f, 0f);         此时的队列为:B AC D

执行顺序是:B-> A-> C ->D

再比如:

A->  matrix postTranslate(2f,0f);         此时的队列为:A

B->  matrix.preTranslate(5f, 0f);               此时的队列为:B A

C->  matrix.setScale(0.2f, 1f);                   此时的队列为:B(注意set会清除之前的内容)

D->  matrix.postTranslate(0.5f,0f);         此时的队列为:B D

E->  matrix.preTranslate(0.5f, 0f);         此时的队列为:E B D

执行顺序是:E->B->D

2.   Camera

Camera在android.graphics包下,与手机的硬件照相机不一样,这个类是一个对图形操作的辅助类,Camera本身并不能对视图产生效果,Camera的作用是产生一个Matrix,让这个Matrix作用于Bitmap或者是Canvas上才能产生相应的效果。

1)        CameraMatrix的比较:

a)        Camera的rotate()相关方法是指定某一维度(x、y、z轴)上旋转指定的角度。

b)       Matrix的rotate()相关方法实现的效果是顺时针旋转指定的角度;与Camera指定Z轴旋转效果相同,但方向相反。

c)        Camera的translate()方法根据某一维度上视点的位移实现图像的缩放,与Matrix的scale()相关方法作用效果相似,只是Matrix的scale()相关方法是直接指定缩放比例。

d)       Camera不支持倾斜操作,Matrix可以直接实现倾斜操作。

2)        使用方式:

a)      Camera.save()保存当前状态,可以将图像过渡得柔和一些

b)      进行相应的操作并获得相应的Matrix作用到对象上,产生效果

c)      Camera.restore()还原状态

参考资料:http://blog.csdn.net/lonelyroamer/article/details/8264189

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值