Android APIDemos 研读之二:android.graphics.Camera

此Camera非彼Camera,在android.graphics包里的Camera,可以理解为2D图形系统中的视角,或者照相机的机位,根据透视的原理我们可以实现一些简单的3D效果。

在ApiDemo中可参考那个Rotate3dAnimation例子。

其实Camera就两个方法:translate和rotate,下面逐一探讨一番吧。

代码很简单,做一个小小的自定义View来做试验罢了。我引入的这张图片尺寸是480*600(因为手机是480*854)。

[java]  view plain copy
  1. protected void onDraw(Canvas canvas) {  
  2.             canvas.drawColor(0xFFCCCCCC);     
  3.              
  4.             //Log.d(TAG,"bit w "+bitmap.getWidth()+",h "+bitmap.getHeight());  
  5.              
  6.             Paint paint = new Paint();  
  7.             paint.setColor(Color.DKGRAY);  
  8.             paint.setStrokeWidth(2.0f);  
  9.             paint.setStyle(Paint.Style.STROKE);  
  10.              
  11.             canvas.drawLine(0600480600, paint);  
  12.             for(int i=0;50*i<600;i++)  
  13.                 canvas.drawLine(050*i, 48050*i, paint);  
  14.             for(int i=0;50*i<480;i++)  
  15.                 canvas.drawLine(50*i, 050*i, 600, paint);  
  16.              
  17.              
  18.             Matrix matrix = new Matrix();  
  19.              
  20.             Camera c = new Camera();  
  21.             c.save();  
  22.              
  23.             //机位的正向转动引起图片向屏幕里翻转  
  24.             //但是绕Z轴的转动,引起图片平面的旋转(2D效果)  
  25.             c.rotateZ(45);  
  26.              
  27.             //X引起图片向右移动50(正向朝右)  
  28.             //Y引起图片向上移动50(正向朝上)  
  29.             //Z引起图片缩小(正向指向自己)  
  30.             c.translate(100f, 0f, 300f);  
  31.             c.getMatrix(matrix);  
  32.             //c.applyToCanvas(canvas);  
  33.              
  34.             c.restore();  
  35.              
  36.         //移到中心点上  
  37.             matrix.preTranslate(-240, -300);  
  38.             matrix.postTranslate(240300);  
  39.              
  40.             canvas.concat(matrix);  
  41.              
  42.             canvas.drawBitmap(bitmap, 0,0,null);  
  43.             //canvas.drawBitmap(bitmap, matrix, null);  
  44.              
  45.              
  46.         }  
  47.     }  


通过实验可知:

translate(x,y,z),很好理解,见代码中的注释。坐标轴似乎与我们常规的理解不一样?为什么会这样呢?
rotateX,rotateY,rotateZ,也很好理解,机位的移动,对图片的影响正好是反向的。

最后要注意的是有两种方法应用这个机位的修改,效果也不一样,说不清,您可以自己尝试一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值