此Camera非彼Camera,在android.graphics包里的Camera,可以理解為2D圖形系統(tǒng)中的視角,或者照相機(jī)的機(jī)位,根據(jù)透視的原理我們可以實(shí)現(xiàn)一些簡(jiǎn)單的3D效果。
在ApiDemo中可參考那個(gè)Rotate3dAnimation例子。
其實(shí)Camera就兩個(gè)方法:translate和rotate,下面逐一探討一番吧。
代碼很簡(jiǎn)單,做一個(gè)小小的自定義View來(lái)做試驗(yàn)罷了。我引入的這張圖片尺寸是480*600(因?yàn)槭謾C(jī)是480*854)。
- protected void onDraw(Canvas canvas) {
- canvas.drawColor(0xFFCCCCCC);
-
-
-
- Paint paint = new Paint();
- paint.setColor(Color.DKGRAY);
- paint.setStrokeWidth(2.0f);
- paint.setStyle(Paint.Style.STROKE);
-
- canvas.drawLine(0, 600, 480, 600, paint);
- for(int i=0;50*i<600;i++)
- canvas.drawLine(0, 50*i, 480, 50*i, paint);
- for(int i=0;50*i<480;i++)
- canvas.drawLine(50*i, 0, 50*i, 600, paint);
-
-
- Matrix matrix = new Matrix();
-
- Camera c = new Camera();
- c.save();
-
-
-
- c.rotateZ(45);
-
-
-
-
- c.translate(100f, 0f, 300f);
- c.getMatrix(matrix);
-
-
- c.restore();
-
-
- matrix.preTranslate(-240, -300);
- matrix.postTranslate(240, 300);
-
- canvas.concat(matrix);
-
- canvas.drawBitmap(bitmap, 0,0,null);
-
-
-
- }
- }
|