這兩天有個(gè)需求,需要做一個(gè)三維動(dòng)畫的view荆责,百度了一下Camera的使用方法。
Camera是android.graphics.Camera下面的類亚脆,并不是android.hardware的操作類做院,不要記混了。
Camera的變換屬性:rotate(x,y,z)、translate(x,y,z)键耕、setLocation(x,y,z);
Camera的坐標(biāo)系和View坐標(biāo)有些不同寺滚,分另為x軸y軸z軸。
坐標(biāo)系旋轉(zhuǎn)方向:
x軸:上正下負(fù)屈雄。 y軸:左負(fù)右正村视。 z軸:左正右負(fù)。
以Camera的rotate方法為例:
這兩天有個(gè)需求酒奶,需要做一個(gè)三維動(dòng)畫的view蚁孔,百度了一下Camera的使用方法。
Camera是android.graphics.Camera下面的類惋嚎,并不是android.hardware的操作類杠氢,不要記混了。
Camera的變換屬性:rotate(x,y,z)另伍、translate(x,y,z)鼻百、setLocation(x,y,z);
Camera的坐標(biāo)系和View坐標(biāo)有些不同,分另為x軸y軸z軸摆尝。
Camera坐標(biāo)系
坐標(biāo)系旋轉(zhuǎn)方向:
x軸:上正下負(fù)温艇。 y軸:左負(fù)右正。 z軸:左正右負(fù)堕汞。
原圖:
以Camera的rotate方法為例:
但是效果不是我們想要的勺爱,可以看到圖到最底部去了,因?yàn)镃amera在0點(diǎn)位置開始投影臼朗,相當(dāng)于canvas.rotate(0,0,bitmap.right,bitmap.bottom),
想要得到正常的旋轉(zhuǎn)效果邻寿,我們還必須要先把canvas移動(dòng)到0點(diǎn),旋轉(zhuǎn)投影到Canvas之后视哑,再使用translate()把Canvas再移回來(lái)绣否。
需要注意的是:Canvas的幾何變換順序是反著來(lái)的。
通過(guò)canvas的translate()方法挡毅,我們得到的效果蒜撮。
兩邊的角怎么沒(méi)了?那是因?yàn)镃amera離原點(diǎn)離近圖片太大造成的跪呈。
解決辦法:Camera.setLocation()設(shè)置相機(jī)的位置段磨,x和y一般默認(rèn)為0就好了,只需要改動(dòng)z軸的值就行了耗绿,因?yàn)閏amera的默認(rèn)位置就是z軸苹支。
下面的效果就是camera沿x軸旋轉(zhuǎn)30度的效果。
有什么不足之處误阻,希望可以指出來(lái)债蜜。