Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android編程實現3D旋轉效果實例

Android編程實現3D旋轉效果實例

編輯:關於Android編程

本文實例講述了Android編程實現3D旋轉效果的方法。分享給大家供大家參考,具體如下:

下面的示例是在Android中實現圖片3D旋轉的效果。

實現3D效果一般使用OpenGL,但在Android平台下可以不直接使用OpenGL,而是使用Camera實現,Camera中原理最終還是使用OpenGL,不過使用Camera比較方便。 Camera類似一個攝像機,當物體不動時,我們帶著攝像機四處移動,在攝像機裡面的畫面就會有立體感,就可以從其它的角度觀看這個物體。廢話不多說,直接看示例。

運行效果如下:

  

 

項目結構:

MainView.java中代碼:

package com.android.graphics;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Camera;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class MainView extends View{
   //Camera類
   private Camera mCamera;
   private Bitmap face;
   private Matrix mMatrix = new Matrix();
   private Paint mPaint = new Paint();
   private int mLastMotionX, mLastMotionY;
   //圖片旋轉時的中心點坐標
   private int centerX, centerY;
   //轉動的總距離,跟度數比例1:1
   private int deltaX, deltaY;
   //圖片寬度高度
   private int bWidth, bHeight;
   public MainView(Context context,AttributeSet attributeSet) {
   super(context,attributeSet);
   setWillNotDraw(false);
   mCamera = new Camera();
   mPaint.setAntiAlias(true);
   face = BitmapFactory.decodeResource(getResources(), R.drawable.x);
   bWidth = face.getWidth();
   bHeight = face.getHeight();
   centerX = bWidth>>1;
   centerY = bHeight>>1;
   }
   void rotate(int degreeX, int degreeY) {
   deltaX += degreeX;
   deltaY += degreeY;
   mCamera.save();
   mCamera.rotateY(deltaX);
   mCamera.rotateX(-deltaY);
   mCamera.translate(0, 0, -centerX);
   mCamera.getMatrix(mMatrix);
   mCamera.restore();
   //以圖片的中心點為旋轉中心,如果不加這兩句,就是以(0,0)點為旋轉中心
   mMatrix.preTranslate(-centerX, -centerY);
   mMatrix.postTranslate(centerX, centerY);
   mCamera.save();
   postInvalidate();
   }
   @Override
   public boolean onTouchEvent(MotionEvent event) {
   int x = (int) event.getX();
   int y = (int) event.getY();
   switch(event.getAction()) {
   case MotionEvent.ACTION_DOWN:
    mLastMotionX = x;
    mLastMotionY = y;
    break;
   case MotionEvent.ACTION_MOVE:
    int dx = x - mLastMotionX;
    int dy = y - mLastMotionY;
    rotate(dx, dy);
    mLastMotionX = x;
    mLastMotionY = y;
    break;
   case MotionEvent.ACTION_UP:
    break;
   }
   return true;
   }
   @Override
   public void dispatchDraw(Canvas canvas) {
   super.dispatchDraw(canvas);
   canvas.drawBitmap(face, mMatrix, mPaint);
   }
}

main.xml中代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
 <com.android.graphics.MainView
  android:id="@+id/cv"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
 />
</LinearLayout>

希望本文所述對大家Android程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved