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

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

源文地址 : http://blog.csdn.net/sharetop/article/details/5277655

  

分类:            Android 11028人阅读 评论(4) 收藏 举报


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

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

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

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

  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(0, 600, 480, 600, paint); 
  12.             for(int i=0;50*i<600;i++) 
  13.                 canvas.drawLine(0, 50*i, 480, 50*i, paint); 
  14.             for(int i=0;50*i<480;i++) 
  15.                 canvas.drawLine(50*i, 0, 50*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(240, 300); 
  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,也很好理解,机位的移动,对图片的影响正好是反向的。

最后要注意的是有两种方法应用这个机位的修改,效果也不一样,说不清,您可以自己尝试一下。

主题推荐
android 移动 bitmap 图片 手机
猜你在找
Android ApiDemos 学习 Graphics-SensorTest
Android ApiDemos示例解析54Graphics-BitmapDecode
androidgraphicsCamera图片绕XYZ轴旋转
Android ApiDemos示例解析205Graphics-OpenGL ES-Translucent GLSurfaceView
Android ApiDemos示例解析201Graphics-OpenGL ES-Compressed Texture
Android ApiDemos示例解析75Graphics-PurgeableBitmap
Android ApiDemos示例解析204Graphics-OpenGL ES-Frame Buffer Object
Android ApiDemos示例解析77Graphics-RoundRects
Android ApiDemos示例解析59Graphics-ColorFilters
Android ApiDemos示例解析82Graphics-TouchPaint
style="border-width: 0px; width: 746px; height: 90px; overflow: hidden;" id="ad_frm_0" src="http://blog.csdn.net/common/ad.html?t=4&containerId=ad_cen&frmId=ad_frm_0" frameborder="0" scrolling="no">
查看评论
3楼 perrypong 2012-05-28 22:58发表[回复] [引用] [举报]
為何圖改成X軸轉時, 約60度, 圖就消失?
2楼 Lotuslovenature 2011-02-15 14:05发表[回复] [引用] [举报]
Thanks for sharing!
1楼 匿名用户 2010-03-03 15:52发表[回复] [引用] [举报]
你好!  你的代码我试了一下,但是无法实现你所说的效果。可以将详细些的代码贴出来吗。或者麻烦发我邮箱可以吗?  xzy2046@sina.com 谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值