Android APIDemos 研读之二:android.graphics.Camera
源文地址 : http://blog.csdn.net/sharetop/article/details/5277655
此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);
- //Log.d(TAG,"bit w "+bitmap.getWidth()+",h "+bitmap.getHeight());
- 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();
- //机位的正向转动引起图片向屏幕里翻转
- //但是绕Z轴的转动,引起图片平面的旋转(2D效果)
- c.rotateZ(45);
- //X引起图片向右移动50(正向朝右)
- //Y引起图片向上移动50(正向朝上)
- //Z引起图片缩小(正向指向自己)
- c.translate(100f, 0f, 300f);
- c.getMatrix(matrix);
- //c.applyToCanvas(canvas);
- c.restore();
- //移到中心点上
- matrix.preTranslate(-240, -300);
- matrix.postTranslate(240, 300);
- canvas.concat(matrix);
- canvas.drawBitmap(bitmap, 0,0,null);
- //canvas.drawBitmap(bitmap, matrix, null);
- }
- }
通过实验可知:
translate(x,y,z),很好理解,见代码中的注释。坐标轴似乎与我们常规的理解不一样?为什么会这样呢?
rotateX,rotateY,rotateZ,也很好理解,机位的移动,对图片的影响正好是反向的。
最后要注意的是有两种方法应用这个机位的修改,效果也不一样,说不清,您可以自己尝试一下。
-
猜你在找
- 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 谢谢!