最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

實現(xiàn)3D效果一般使用OpenGL,但在Android平臺下可以不直接使用OpenGL,而是使用Camera實現(xiàn),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;
   //轉動的總距離,跟度數(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();
   //以圖片的中心點為旋轉中心,如果不加這兩句,就是以(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程序設計有所幫助。

相關文章

  • 實現(xiàn)輪轉廣告帶底部指示的自定義ViewPager控件

    實現(xiàn)輪轉廣告帶底部指示的自定義ViewPager控件

    在項目中經(jīng)常需要使用輪轉廣告的效果,在android-v4版本中提供的ViewPager是一個很好的工具,而一般我們使用Viewpager的時候,都會選擇在底部有一排指示物指示當前顯示的是哪一個page,下面我們就做這個功能的實現(xiàn)
    2013-11-11
  • Android中處理apple-touch-icon詳解

    Android中處理apple-touch-icon詳解

    這篇文章主要介紹了Android中處理apple-touch-icon詳解,在Android如果想把網(wǎng)頁放到桌面上,也需要使用Touch Icon圖標才可實現(xiàn),本文即講解Android中處理Touch Icon的一些知識,需要的朋友可以參考下
    2015-01-01
  • 分析Android Activity的啟動過程

    分析Android Activity的啟動過程

    這篇文章主要介紹了分析Android Activity的啟動過程的相關資料,需要的朋友可以參考下
    2017-07-07
  • Android實現(xiàn)騰訊新聞的新聞類別導航效果

    Android實現(xiàn)騰訊新聞的新聞類別導航效果

    這篇文章主要介紹了Android實現(xiàn)騰訊新聞的新聞類別導航效果,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • kotlin 官方學習教程之基礎語法詳解

    kotlin 官方學習教程之基礎語法詳解

    這篇文章主要介紹了kotlin 官方學習教程之基礎語法詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • Android SeekBar在刷新使用中需要注意的問題

    Android SeekBar在刷新使用中需要注意的問題

    SeekBar在刷新使用中需要注意的問題:在使用SeekBar的過程中需要注意刷新頻率,避免頻繁刷新造成的性能問題;同時,需要對SeekBar的監(jiān)聽事件進行適當?shù)膬?yōu)化,減少回調次數(shù),提高響應速度
    2023-05-05
  • Android實現(xiàn)上傳文件到服務器實例詳解

    Android實現(xiàn)上傳文件到服務器實例詳解

    本篇文章詳細介紹了Android實現(xiàn)上傳文件到服務器實例詳解,實現(xiàn)了文件每隔5秒進行上傳,有需要的可以了解一下。
    2016-11-11
  • Android利用Intent讀取和更新通訊錄

    Android利用Intent讀取和更新通訊錄

    這篇文章主要介紹了Android利用Intent讀取和更新通訊錄的相關資料,通過用戶配置文件(user profile)讀取和更新該手機的所有聯(lián)系人信息,需要的朋友可以參考下
    2016-06-06
  • 總結Android App內(nèi)存優(yōu)化之圖片優(yōu)化

    總結Android App內(nèi)存優(yōu)化之圖片優(yōu)化

    網(wǎng)上有很多大拿分享的關于Android性能優(yōu)化的文章,主要是通過各種工具分析,使用合理的技巧優(yōu)化APP的體驗,提升APP的流暢度,但關于內(nèi)存優(yōu)化的文章很少有看到。下面是我在實踐過程中使用的一些方法,很多都是不太成熟的項目,只是將其作為一種處理方式分享給大家。
    2016-08-08
  • Android Studio 常見問題及解決方法(推薦)

    Android Studio 常見問題及解決方法(推薦)

    這篇文章主要介紹了Android Studio 常見問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

罗江县| 邳州市| 那坡县| 惠州市| 乌海市| 禹城市| 眉山市| 永宁县| 陵水| 揭阳市| 哈密市| 巴彦县| 莱芜市| 城步| 寻甸| 乌鲁木齐市| 宁乡县| 普定县| 宝鸡市| 剑阁县| 新化县| 南涧| 贺州市| 余姚市| 长治县| 西丰县| 土默特左旗| 札达县| 新田县| 郑州市| 苍南县| 台北县| 绵阳市| 肥西县| 镇原县| 广汉市| 新闻| 渭南市| 嵊泗县| 九龙城区| 莱芜市|