亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android編程實(shí)現(xiàn)3D旋轉(zhuǎn)效果實(shí)例

 更新時(shí)間:2016年01月11日 09:23:08   作者:Healtheon  
這篇文章主要介紹了Android編程實(shí)現(xiàn)3D旋轉(zhuǎn)效果的方法,基于Android的Camera類實(shí)現(xiàn)坐標(biāo)變換達(dá)到圖片3D旋轉(zhuǎn)效果,需要的朋友可以參考下

本文實(shí)例講述了Android編程實(shí)現(xiàn)3D旋轉(zhuǎn)效果的方法。分享給大家供大家參考,具體如下:

下面的示例是在Android中實(shí)現(xiàn)圖片3D旋轉(zhuǎn)的效果。

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

運(yùn)行效果如下:

  

 

項(xiàng)目結(jié)構(gòu):

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;
   //圖片旋轉(zhuǎn)時(shí)的中心點(diǎn)坐標(biāo)
   private int centerX, centerY;
   //轉(zhuǎn)動的總距離,跟度數(shù)比例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();
   //以圖片的中心點(diǎn)為旋轉(zhuǎn)中心,如果不加這兩句,就是以(0,0)點(diǎn)為旋轉(zhuǎn)中心
   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程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論