此Camera非彼Camera,在android.graphics包里的Camera,可以理解为2D图形系统中的视角,或者照相机的机位,根据透视的原理我们可以实现一些简单的3D效果。
在ApiDemo中可参考那个Rotate3dAnimation例子。
其实Camera就两个方法:translate和rotate,下面逐一探讨一番吧。
代码很简单,做一个小小的自定义View来做试验罢了。我引入的这张图片尺寸是480*600(因为手机是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);
-
-
-
- }
- }
|