Android APIDemos 研讀之二:android.graphics.Camera 源文地址 : http://blog.csdn.net/sharetop/article/details/5277655
阿新 • • 發佈:2018-12-16
Android APIDemos 研讀之二:android.graphics.Camera
源文地址 : http://blog.csdn.net/sharetop/article/details/5277655
分類: Android 2010-02-01 16:39
此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
- 2樓 Lotuslovenature 2011-02-15 14:05發表[回覆] [引用] [舉報]
- Thanks for sharing!
- 1樓 匿名使用者 2010-03-03 15:52發表[回覆] [引用] [舉報]
- 你好! 你的程式碼我試了一下,但是無法實現你所說的效果。可以將詳細些的程式碼貼出來嗎。或者麻煩發我郵箱可以嗎? [email protected] 謝謝!
此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,也很好理解,機位的移動,對圖片的影響正好是反向的。
最後要注意的是有兩種方法應用這個機位的修改,效果也不一樣,說不清,您可以自己嘗試一下。