Android Tween動畫之RotateAnimation實現圖片不停旋轉效果例項介紹

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

主要介紹Android中如何使用rotate實現圖片不停旋轉的效果。Android 平臺提供了兩類動畫,一類是 Tween 動畫,即通過對場景裡的物件不斷做影象變換(平移、縮放、旋轉)產生動畫效果;第二類是 Frame 動畫,即順序播放事先做好的影象,跟電影類似。本文分析 Tween動畫的rotate實現旋轉效果。

在新浪微部落格戶端中各個操作進行中時activity的右上角都會有個不停旋轉的圖示,類似重新整理的效果,給使用者以操作中的提示。這種非模態的提示方式推薦使用,那麼下面就分享下如何實現這種效果吧

1、定義一個ImageView
定義一個ImageView是為了裝載圖片,其中的圖片將被rotate用來進行旋轉,其他View亦可。
資原始檔為
複製程式碼 程式碼如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<ImageView
android:id=”@ id/infoOperating”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:src=”@drawable/operating”
android:scaleType=”center”>
</ImageView>
</LinearLayout>

其中的android:src為圖片內容,可使用附件中的圖片。
java程式碼為
複製程式碼 程式碼如下:
ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);

2、定義rotate旋轉效果
在res/anim資料夾下新建tip.xml檔案,內容如下
複製程式碼 程式碼如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android”>
<rotate
android:fromDegrees=”0″
android:toDegrees=”359″
android:duration=”500″
android:repeatCount=”-1″
android:pivotX=”50%”
android:pivotY=”50%” />
</set>

含義表示從0到359度開始迴圈旋轉,0-359(若設定成360在停止時會出現停頓現象)度旋轉所用時間為500ms,旋轉中心距離view的左頂點為50%距離,距離view的上邊緣為50%距離,即正中心,具體每個含義見下面的具體屬性介紹。

java程式碼為
複製程式碼 程式碼如下:
Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);

setInterpolator表示設定旋轉速率。LinearInterpolator為勻速效果,Accelerateinterpolator為加速效果、DecelerateInterpolator為減速效果,具體可見下面android:interpolator的介紹。
a. 關於其中的屬性意義如下(紅色部分加以注意):
android:fromDegrees
起始的角度度數
android:toDegrees 結束的角度度數,負數表示逆時針,正數表示順時針。如10圈則比android:fromDegrees大3600即可
android:pivotX 旋轉中心的X座標
浮點數或是百分比。浮點數表示相對於Object的左邊緣,如5; 百分比表示相對於Object的左邊緣,如5%; 另一種百分比表示相對於父容器的左邊緣,如5%p; 一般設定為50%表示在Object中心
android:pivotY 旋轉中心的Y座標
浮點數或是百分比。浮點數表示相對於Object的上邊緣,如5; 百分比表示相對於Object的上邊緣,如5%; 另一種百分比表示相對於父容器的上邊緣,如5%p; 一般設定為50%表示在Object中心
android:duration 表示從android:fromDegrees轉動到android:toDegrees所花費的時間,單位為毫秒。可以用來計算速度。
android:interpolator表示變化率,但不是執行速度。一個插補屬性,可以將動畫效果設定為加速,減速,反覆,反彈等。預設為開始和結束慢中間快,
android:startOffset 在呼叫start函式之後等待開始執行的時間,單位為毫秒,若為10,表示10ms後開始執行
android:repeatCount 重複的次數,預設為0,必須是int,可以為-1表示不停止
android:repeatMode 重複的模式,預設為restart,即重頭開始重新執行,可以為reverse即從結束開始向前重新執行。在android:repeatCount大於0或為infinite時生效
android:detachWallpaper 表示是否在桌布上執行
android:zAdjustment 表示被animated的內容在執行時在z軸上的位置,預設為normal。
normal保持內容當前的z軸順序
top執行時在最頂層顯示
bottom執行時在最底層顯示
b. 執行速度
執行速度為執行時間(android:duration)除以執行角度差(android:toDegrees-android:fromDegrees),比如android:duration為1000,android:toDegrees為360,android:fromDegrees為0就表示1秒轉1圈。
c. 迴圈執行
複製程式碼 程式碼如下:
android:fromDegrees=”0″
android:toDegrees=”360″
android:repeatCount=”-1″

android:repeatCount=”-1″即表示迴圈執行,配合上android:fromDegrees=”0″ android:toDegrees=”360″表示不間斷
3、開始和停止旋轉
在操作開始之前呼叫
複製程式碼 程式碼如下:
if (operatingAnim != null) {
infoOperatingIV.startAnimation(operatingAnim);
}

在操作完成時呼叫
複製程式碼 程式碼如下:
infoOperatingIV.clearAnimation();

許多朋友不知道如何停止旋轉animation,所以強制設定rotate轉動多少圈表示操作,但卻無法與操作實際的進度匹配上,實際上只要如上程式碼所示清除animation即可。
其他:
對於上面的轉動在橫屏(被設定為了不重繪activity)時會出現問題,即旋轉中心偏移,導致動畫旋轉偏離原旋轉中心。解決如下
複製程式碼 程式碼如下:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (operatingAnim != null && infoOperatingIV != null && operatingAnim.hasStarted()) {
infoOperatingIV.clearAnimation();
infoOperatingIV.startAnimation(operatingAnim);
}
}

您可能感興趣的文章:

Android動畫之補間動畫(Tween Animation)例項詳解Android動畫之漸變動畫(Tween Animation)詳解 (漸變、縮放、位移、旋轉)Android開發之圖形影象與動畫(二)Animation實現影象的漸變/縮放/位移/旋轉Android中利用matrix 控制圖片的旋轉、縮放、移動android 多點觸控圖片縮放的具體實現方法Android 圖片縮放與旋轉的實現詳解Android程式設計實現popupwindow彈出後螢幕背景變成半透明效果Android程式設計實現設定按鈕背景透明與半透明及圖片背景透明的方法android 對話方塊彈出位置和透明度的設定具體實現方法Android應用中設定alpha值來製作透明與漸變效果的例項Android設定Activity背景為透明style的簡單方法(必看)Android實現螢幕旋轉方法總結Android開發 旋轉螢幕導致Activity重建解決方法Android程式設計中呼叫Camera時預覽畫面有旋轉問題的解決方法Android補間動畫基本使用(位移、縮放、旋轉、透明)

相關文章

Android 開發 最新文章