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

歡迎訪問 生活随笔!

生活随笔

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

Android

android左右旋转动画效果图,Android新姿势:3D翻转效果原理

發布時間:2024/9/27 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android左右旋转动画效果图,Android新姿势:3D翻转效果原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,android里是沒有3D翻轉的動畫效果的,但是呢,android有提供一個Camera的類,可以利用這個類來實現。

先看代碼,Rotate3d是繼承了Animation的一個動畫類,多余的代碼我就不給出了,只看applyTransformation方法內是怎么實現的。

public class Rotate3d extends Animation {

...

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

final float fromDegrees = mFromDegrees;

// 生成中間角度

float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);

final float centerX = mCenterX;

final float centerY = mCenterY;

final Camera camera = mCamera;

final Matrix matrix = t.getMatrix();

camera.save();

// 左右翻轉

camera.rotateY(degrees);

// 取得變換后的矩陣

camera.getMatrix(matrix);

camera.restore();

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

}

...

}

接下來解析下原理。

1、先獲取視圖的Matrix:

final Matrix matrix = t.getMatrix();

2、利用camera改變matrix的參數:

camera.rotateY(degrees);//翻轉一定的角度

camera.getMatrix(matrix);//改變matrix

PS:注意這里是用getMatrix的方法來改變,順便普及一下小知識,java的方法傳入的參數如果是對象的話,是可以在方法內改變對象的屬性值的;不過如果傳入的是一個int、float、String之類的基礎類型,則不會改變。舉例:

假如有個方法 set(int i){ i++; } 然后用了 int i=3; set(i); 這時打印出的 i 還是3。

但是 假如有個方法 set(C c){ c.i++; } 然后用了 c = new C(); c.i=3; set(c); 這時打印出 c 對象的 i 就是4了。

3、繼續,一般上面的步驟已經可以見到3D翻轉效果了,但是很難看,因為這種翻轉是沒有中心點的,接下來就是將翻轉后的視圖弄到一個位置上去(其實這么說也不太對)。

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

這個的話其實我也研究了好久最后沒研究出個所以然來,反正記住這樣寫就可以設置以某個坐標為中心進行翻轉了。

---------------------------我叫分割線--------------------------

最近搞的一個項目需要用到有3D翻轉效果的gallery,卡了我好久。

上面給出的代碼是制作一個3D翻轉的動畫效果,但是如果要在gallery中用到這種動畫效果的話自然不行。主要是翻轉角度的計算問題。

animation動畫類中可以根據動畫發生的時間點來計算角度,而gallery就不行,因為gallery是隨手勢滑動發生動畫的,時間不固定,還可以左右來回滑動。

不過只要解決了角度的問題,3D翻轉效果自然不是問題。先看代碼。

@Override

protected boolean getChildStaticTransformation(View child, Transformation t) {

final float centerX = App.width / 2;

final float centerY = App.height / 2;

final Camera camera = mCamera;

camera.save();

float rotate = -child.getLeft() * 90 / 480;

camera.rotateY(rotate);

camera.getMatrix(t.getMatrix());

camera.restore();

t.getMatrix().preTranslate(-centerX, -centerY);

t.getMatrix().postTranslate(centerX, centerY);

return true;

}

這是重寫gallery的一個方法,具體的角度計算,其實就是根據當前視圖View child與左屏幕的距離來計算(也可以當成是x坐標)。

好~效果出來了!還是挺有成就感的~~ >v<

總結

以上是生活随笔為你收集整理的android左右旋转动画效果图,Android新姿势:3D翻转效果原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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