Android Camera 3D效果
阿新 • • 發佈:2019-01-17
一、概念
在Android中要想實現3D效果,第一個想到的應該就是OpenGL ES,因為在很多基礎教材中幾乎都提到了它。但是其使用起來還是稍微麻煩一些,而且它也主要用在遊戲方面,那在應用方面有沒有更好的選擇呢?答案是肯定的,使用Camera類就可以完成3D效果。它有旋轉、平移的一系列方法,實際上都是在改變一個Matrix物件,一系列操作完畢之後,我們得到這個Matrix,然後畫我們的物體,就可以了。實際上內部機制還是opengl,不過大大簡化了使用。這麼說可能有些朋友會有疑問,Camera不是相機方面的麼,其實看完下面的圖片就明白了。不錯,Camera在hardware包裡面是負責相機方面的;在graphics包裡面是圖形方面的,不要混淆了。因此接下來主要說一下後者的一些用法,Camera用來計算3D轉換、生成矩陣,然後應用在畫布上。它的構造方法只有一個不帶引數的Camera(),用於例項化一個帶有空的轉換的Camera。 Camera的座標系是左手座標系。如下圖所示:
1、camera位於座標點(0,0),也就是檢視的左上角;
2、camera.translate(10,20,30)的意思是把觀察物體右移10,上移20,向前移30(即讓物體遠離camera,這樣物體將會變小);
3、camera.rotateX(45)的意思是繞X軸順時針旋轉45度。舉例來說,如果物體中間線和X軸重合的話,繞X軸順時針旋轉45度就是指物體上半部分向裡翻轉,下半部分向外翻轉;
4、camera.rotateY(45)的意思是繞Y軸順時針旋轉45度。舉例來說,如果物體中間線和Y軸重合的話,繞Y軸順時針旋轉45度就是指物體左半部分向外翻轉,右半部分向裡翻轉;
5、camera.rotateZ(45)的意思是繞Z軸逆時針旋轉45度。舉例來說,如果物體中間線和Z軸重合的話,繞Z軸順時針旋轉45度就是物體上半部分向左翻轉,下半部分向右翻轉。它的方法比較少,而且也都比較容易理解,但是都比較常用: 接下來說一下各個方法的用法:。1、applyToCanvas(Canvas canvas) 根據當前的變換計算出相應的矩陣,然後應用到制定的畫布上去,注意是由畫布來設定矩陣的。
2、rotateX(float degree) 繞著x軸旋轉degree個度數
3、rotateY(float degree) 繞著y軸旋轉degree個度數
4、rotateZ(float degree) 繞著z軸旋轉degree個度數
5、translate(float x,float y,float z) 在x、y、z座標軸上執行變換操作
6、save()和restore() 儲存原狀態,操作完之後,恢復到原狀態
除此之外,還要有一個類來配合Camera來使用,那就是Matrix。Matrix用於處理三維的矩陣座標變換,也常用於圖片的處理。Matrix提供了translate(平移)、rotate(旋轉)、scale(縮放)、skew(傾斜)四種操作,這四種操作的內部實現過程都是通過matrix.setValues(…)來設定矩陣的值來達到變換圖片的效果。Matrix的每種操作都有set、pre、post三種操作,set是清空佇列再新增,pre是在佇列最前面插入,post是在佇列最後面插入。除了translate,其他三種操作都可以指定中心點。
二、例項 1、翻轉 比如要實現一個圖片翻轉的效果,可以這樣來寫:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import
android.graphics.Camera;
import
android.graphics.Matrix;
import
android.view.animation.Animation;
import
android.view.animation.Transformation;
public
class
Rotate3DAnimation extends
Animation {
//
3d rotate
private
float
mFromDegrees;
private
float
mToDegrees;
private
float
mCenterX;
privat
|