Android編程實(shí)現(xiàn)3D旋轉(zhuǎn)效果實(shí)例
本文實(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ì)有所幫助。
- Android 3D旋轉(zhuǎn)動畫效果實(shí)現(xiàn)分解
- Android高級圖片滾動控件實(shí)現(xiàn)3D版圖片輪播器
- Android酷炫動畫效果之3D星體旋轉(zhuǎn)效果
- Android動畫之3D翻轉(zhuǎn)效果實(shí)現(xiàn)函數(shù)分析
- Android開發(fā) OpenGL ES繪制3D 圖形實(shí)例詳解
- 安卓(Android)實(shí)現(xiàn)3DTouch效果
- Android 使用Gallery實(shí)現(xiàn)3D相冊(附效果圖+Demo源碼)
- Android編程實(shí)現(xiàn)3D立體旋轉(zhuǎn)效果的實(shí)例代碼
相關(guān)文章
Android 軟鍵盤狀態(tài)并隱藏輸入法的實(shí)例
這篇文章主要介紹了Android 軟鍵盤狀態(tài)并隱藏輸入法的實(shí)例的相關(guān)資料,這里提供實(shí)例實(shí)現(xiàn)軟鍵盤切換并隱藏輸入法的鍵盤,需要的朋友可以參考下2017-09-09Android實(shí)現(xiàn)支持所有View的通用的下拉刷新控件
這篇文章主要介紹了Android實(shí)現(xiàn)支持所有View的通用的下拉刷新控件的相關(guān)資料,需要的朋友可以參考下2016-06-06Android監(jiān)聽電池狀態(tài)實(shí)例代碼
這篇文章給大家介紹Android監(jiān)聽電池狀態(tài)實(shí)例代碼,對android監(jiān)聽電池狀態(tài)相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-03-03Android?Material組件庫日期選擇和時(shí)間選擇器的使用方法
這篇文章主要介紹了Android?Material組件庫(日期選擇和時(shí)間選擇器)基本使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11Android編程實(shí)現(xiàn)通知欄進(jìn)度條效果的方法示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)通知欄進(jìn)度條效果的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android通知欄進(jìn)度條效果的功能、布局相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2018-02-02Android 頂部標(biāo)題欄隨滑動時(shí)的漸變隱藏和漸變顯示效果
這篇文章主要介紹了Android 頂部標(biāo)題欄隨滑動時(shí)的漸變隱藏和漸變顯示效果,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06Flutter調(diào)用Android和iOS原生代碼的方法示例
這篇文章主要給大家介紹了關(guān)于Flutter調(diào)用Android和iOS原生代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Android中的RecyclerView新組件初步上手指南
RecyclerView是Android L版本開始采用的一個(gè)組件,被人們認(rèn)為用來代替?zhèn)鹘y(tǒng)的ListView,下面我們就一起來看一下Android中的RecyclerView新組件初步上手指南2016-06-06