日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android实现3D旋转效果

發布時間:2023/11/29 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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>??


最后,希望轉載的朋友能夠尊重作者的勞動成果,加上轉載地址:http://www.cnblogs.com/hanyonglu/archive/2012/02/12/2347636.html??謝謝。

?

完畢。^_^?

總結

以上是生活随笔為你收集整理的Android实现3D旋转效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。