亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程實現3D滑動旋轉效果的方法

2020-04-11 11:19:12
字體:
來源:轉載
供稿:網友

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

這里我們通過代碼實現一些滑動翻頁的動畫效果。

Animation實現動畫有兩個方式:幀動畫(frame-by-frame animation)和補間動畫(tweened animation)

本示例通過繼承Animation自定義Rotate3D,實現3D翻頁效果。效果圖如下:

1、Rotate3D(Animation)

首先,自定義Animation的3D動畫類Rotate3D

public class Rotate3D extends Animation {   private float fromDegree;  // 旋轉起始角度   private float toDegree;   // 旋轉終止角度   private float mCenterX;   // 旋轉中心x   private float mCenterY;   // 旋轉中心y   private Camera mCamera;   public Rotate3D(float fromDegree, float toDegree, float centerX, float centerY) {     this.fromDegree = fromDegree;     this.toDegree = toDegree;     this.mCenterX = centerX;     this.mCenterY = centerY;   }   @Override   public void initialize(int width, int height, int parentWidth, int parentHeight) {     super.initialize(width, height, parentWidth, parentHeight);     mCamera = new Camera();   }   @Override   protected void applyTransformation(float interpolatedTime, Transformation t) {     final float FromDegree = fromDegree;     float degrees = FromDegree + (toDegree - fromDegree) * interpolatedTime;  // 旋轉角度(angle)     final float centerX = mCenterX;     final float centerY = mCenterY;     final Matrix matrix = t.getMatrix();     if (degrees <= -76.0f) {       degrees = -90.0f;       mCamera.save();       mCamera.rotateY(degrees); // 旋轉       mCamera.getMatrix(matrix);       mCamera.restore();     } else if (degrees >= 76.0f) {       degrees = 90.0f;       mCamera.save();       mCamera.rotateY(degrees);       mCamera.getMatrix(matrix);       mCamera.restore();     } else {       mCamera.save();       mCamera.translate(0, 0, centerX); // 位移x       mCamera.rotateY(degrees);       mCamera.translate(0, 0, -centerX);       mCamera.getMatrix(matrix);       mCamera.restore();     }     matrix.preTranslate(-centerX, -centerY);     matrix.postTranslate(centerX, centerY);   } }

然后,實例化Rotate3D的旋轉方向

public void initAnimation() {   // 獲取旋轉中心   DisplayMetrics dm = new DisplayMetrics();   dm = getResources().getDisplayMetrics();   mCenterX = dm.widthPixels / 2;   mCenterY = dm.heightPixels / 2;   // 定義旋轉方向   int duration = 1000;   lQuest1Animation = new Rotate3D(0, -90, mCenterX, mCenterY);  // 下一頁的【question1】旋轉方向(從0度轉到-90,參考系為水平方向為0度)   lQuest1Animation.setFillAfter(true);   lQuest1Animation.setDuration(duration);   lQuest2Animation = new Rotate3D(90, 0, mCenterX, mCenterY);   // 下一頁的【question2】旋轉方向(從90度轉到0,參考系為水平方向為0度)(起始第一題)   lQuest2Animation.setFillAfter(true);   lQuest2Animation.setDuration(duration);   rQuest1Animation = new Rotate3D(0, 90, mCenterX, mCenterY);   // 上一頁的【question1】旋轉方向(從0度轉到90,參考系為水平方向為0度)   rQuest1Animation.setFillAfter(true);   rQuest1Animation.setDuration(duration);   rQuest2Animation = new Rotate3D(-90, 0, mCenterX, mCenterY);  // 上一頁的【question2】旋轉方向(從-90度轉到0,參考系為水平方向為0度)   rQuest2Animation.setFillAfter(true);   rQuest2Animation.setDuration(duration); }

2、Activity

首先,定義兩個布局文件,用于旋轉的畫面切換

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/layout_main"   android:layout_width="fill_parent"   android:layout_height="wrap_content"         android:orientation="vertical"> ... </LinearLayout>

next.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/layout_next"   android:layout_width="fill_parent"   android:layout_height="wrap_content"         android:orientation="vertical"> ... </LinearLayout>

限于篇幅,完整布局文件請詳見源碼 ^_^

然后,初始化兩個旋轉的布局文件資源

private void initMain(){     setContentView(R.layout.main);   layoutmain = (LinearLayout)findViewById(R.id.layout_main);   btn_MainLast = (Button)findViewById(R.id.main_last);   btn_MainNext = (Button)findViewById(R.id.main_next);   btn_MainLast.setOnClickListener(listener);   btn_MainNext.setOnClickListener(listener); } private void initNext(){     setContentView(R.layout.next);   layoutnext = (LinearLayout)findViewById(R.id.layout_next);   btn_NextLast = (Button)findViewById(R.id.next_last);   btn_NextNext = (Button)findViewById(R.id.next_next);   btn_NextLast.setOnClickListener(listener);   btn_NextNext.setOnClickListener(listener); }

最后,設置布局文件中的按鈕監聽事件,響應3D旋轉動畫和方向

private View.OnClickListener listener = new View.OnClickListener() {   @Override   public void onClick(View v) {     switch (v.getId()) {     case R.id.main_last:  // 上一頁       layoutmain.startAnimation(lQuest1Animation);  // 當前頁向左旋轉(0,-90)       initNext();       layoutnext.startAnimation(lQuest2Animation);  // 下一頁向左旋轉(90, 0)       break;     case R.id.main_next:  // 下一頁       layoutmain.startAnimation(rQuest1Animation);  // 當前頁向右旋轉(0,90)       initNext();       layoutnext.startAnimation(rQuest2Animation);  // 下一頁向右旋轉(-90, 0)       break;     case R.id.next_last:       layoutnext.startAnimation(lQuest1Animation);       initMain();       layoutmain.startAnimation(lQuest2Animation);       break;     case R.id.next_next:       layoutnext.startAnimation(rQuest1Animation);       initMain();       layoutmain.startAnimation(rQuest2Animation);       break;     }   } };

完整實例代碼代碼點擊此處本站下載。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
综合激情国产一区| 国产999在线| 国产亚洲免费的视频看| 午夜精品久久久久久久99黑人| 国产精品一区久久久| 91精品国产91久久久久久不卡| 成人xvideos免费视频| 日韩av在线资源| 欧美丰满少妇xxxx| 欧美国产乱视频| 欧美一级高清免费| 欧美日韩亚洲成人| 久久久精品视频在线观看| 成人h视频在线观看播放| 久久精品视频va| 动漫精品一区二区| 国产精品久久久久久久午夜| 91亚洲午夜在线| 国产97人人超碰caoprom| 伦理中文字幕亚洲| 综合激情国产一区| 欧美视频精品一区| 国产精品美女主播| 久久国产精品电影| 一区二区三区视频免费| 97热精品视频官网| 成人免费在线视频网址| 亚洲综合在线播放| 日本亚洲精品在线观看| 欧美色道久久88综合亚洲精品| 欧美精品在线观看| www.国产一区| 国产精品久久久久久久久免费| 国产盗摄xxxx视频xxx69| 亚洲午夜精品久久久久久久久久久久| 国产中文日韩欧美| 日韩亚洲一区二区| www.日韩.com| 欧美午夜精品久久久久久久| 亚洲一区二区中文| 欧美在线激情网| 日韩亚洲欧美中文在线| 国产不卡一区二区在线播放| 国产国语刺激对白av不卡| 日本视频久久久| 久久99视频精品| 亚洲日本欧美中文幕| 岛国av在线不卡| 岛国av一区二区在线在线观看| 欧洲亚洲在线视频| 日韩av免费在线| 中文字幕一精品亚洲无线一区| 国产www精品| 在线色欧美三级视频| 欧美精品成人91久久久久久久| 国自产精品手机在线观看视频| 日韩在线资源网| 亚洲欧洲在线观看| 7777精品视频| 中文字幕亚洲情99在线| 2018中文字幕一区二区三区| 亚洲欧美国产一区二区三区| 欧美亚洲一区在线| 亚洲美女视频网| 欧美日韩国产一区中文午夜| 亚洲精品色婷婷福利天堂| 国产精品6699| 91手机视频在线观看| 国产精品麻豆va在线播放| 亚洲伊人久久大香线蕉av| 国产精品国产福利国产秒拍| 中文字幕在线看视频国产欧美| 亚洲色图偷窥自拍| 九九九久久久久久| 欧美日韩在线一区| 欧美中文字幕视频| 国产精品美女久久| 亚洲一区二区三区视频| 粉嫩老牛aⅴ一区二区三区| 岛国av一区二区| 最新亚洲国产精品| 亚洲第一页自拍| 成人黄色短视频在线观看| 欧美激情亚洲国产| 国产视频精品在线| 在线电影欧美日韩一区二区私密| 欧美性色19p| 日韩精品中文字幕有码专区| 中文字幕一区二区精品| 亚洲毛片在线看| 色偷偷亚洲男人天堂| 亚洲区中文字幕| 18久久久久久| 亚洲一区二区三区视频播放| 亚洲在线一区二区| 日韩国产欧美区| 久久国产天堂福利天堂| 欧美一区二区视频97| 久久激情视频久久| 日本老师69xxx| 国产精品女主播| 国产精品免费观看在线| 97久久精品视频| 亚洲精品久久久久中文字幕欢迎你| 欧美在线视频一区| 欧美猛少妇色xxxxx| 日本视频久久久| 欧美孕妇性xx| 日韩成人中文电影| 一区二区三区视频观看| 日韩精品日韩在线观看| 97国产精品视频人人做人人爱| 97精品免费视频| 色综合久综合久久综合久鬼88| 中文字幕av日韩| 国产精品久久久久久久久久ktv| 日本精品久久久久影院| 久久久久中文字幕| 成人午夜黄色影院| 国产日韩在线观看av| 欧美一级成年大片在线观看| 亚洲男人天堂2023| 欧美精品在线免费| 久久久国产视频91| 久久综合九色九九| 国产精品久久久久久久久免费| 日韩精品丝袜在线| 国产成人亚洲综合91精品| 欧美老女人在线视频| 国产亚洲免费的视频看| 69av视频在线播放| 色综合天天综合网国产成人网| 中文字幕亚洲一区| 亚洲一区免费网站| 夜夜嗨av一区二区三区免费区| 久久影视三级福利片| 亚洲图片在区色| 草民午夜欧美限制a级福利片| 福利视频导航一区| 国产精品18久久久久久麻辣| 国产97在线|日韩| 性欧美xxxx视频在线观看| 欧美高清电影在线看| 久久精品99久久久香蕉| 久久久久久久久久av| 欧美肥臀大乳一区二区免费视频| 欧美小视频在线观看| 欧美日韩激情小视频| 青青久久aⅴ北条麻妃| 国产精品美女久久| 国产精品免费一区| 色偷偷888欧美精品久久久| 国产精品丝袜视频| 51色欧美片视频在线观看| 欧美性生活大片免费观看网址| 欧美亚洲国产日韩2020| 国产精品盗摄久久久| 成人妇女免费播放久久久| 欧美精品久久久久久久免费观看| 奇米4444一区二区三区| 欧美一区二粉嫩精品国产一线天| 国产日韩中文在线| 国产不卡一区二区在线播放| 日韩成人久久久|