Android Tween動畫之RotateAnimation實現(xiàn)圖片不停旋轉(zhuǎn)效果實例介紹
更新時間:2013年05月23日 17:09:18 作者:
Android中如何使用rotate實現(xiàn)圖片不停旋轉(zhuǎn)的效果,下面與大家共同分析下Tween動畫的rotate實現(xiàn)旋轉(zhuǎn)效果,感興趣的朋友可以參考下哈
主要介紹Android中如何使用rotate實現(xiàn)圖片不停旋轉(zhuǎn)的效果。Android 平臺提供了兩類動畫,一類是 Tween 動畫,即通過對場景里的對象不斷做圖像變換(平移、縮放、旋轉(zhuǎn))產(chǎn)生動畫效果;第二類是 Frame 動畫,即順序播放事先做好的圖像,跟電影類似。本文分析 Tween動畫的rotate實現(xiàn)旋轉(zhuǎn)效果。
在新浪微博客戶端中各個操作進行中時activity的右上角都會有個不停旋轉(zhuǎn)的圖標(biāo),類似刷新的效果,給用戶以操作中的提示。這種非模態(tài)的提示方式推薦使用,那么下面就分享下如何實現(xiàn)這種效果吧
1、定義一個ImageView
定義一個ImageView是為了裝載圖片,其中的圖片將被rotate用來進行旋轉(zhuǎn),其他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為圖片內(nèi)容,可使用附件中的圖片。
java代碼為
ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);
2、定義rotate旋轉(zhuǎn)效果
在res/anim文件夾下新建tip.xml文件,內(nèi)容如下
<?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度開始循環(huán)旋轉(zhuǎn),0-359(若設(shè)置成360在停止時會出現(xiàn)停頓現(xiàn)象)度旋轉(zhuǎn)所用時間為500ms,旋轉(zhuǎn)中心距離view的左頂點為50%距離,距離view的上邊緣為50%距離,即正中心,具體每個含義見下面的具體屬性介紹。
java代碼為
Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);
setInterpolator表示設(shè)置旋轉(zhuǎn)速率。LinearInterpolator為勻速效果,Accelerateinterpolator為加速效果、DecelerateInterpolator為減速效果,具體可見下面android:interpolator的介紹。
a. 關(guān)于其中的屬性意義如下(紅色部分加以注意):
android:fromDegrees 起始的角度度數(shù)
android:toDegrees 結(jié)束的角度度數(shù),負(fù)數(shù)表示逆時針,正數(shù)表示順時針。如10圈則比android:fromDegrees大3600即可
android:pivotX 旋轉(zhuǎn)中心的X坐標(biāo)
浮點數(shù)或是百分比。浮點數(shù)表示相對于Object的左邊緣,如5; 百分比表示相對于Object的左邊緣,如5%; 另一種百分比表示相對于父容器的左邊緣,如5%p; 一般設(shè)置為50%表示在Object中心
android:pivotY 旋轉(zhuǎn)中心的Y坐標(biāo)
浮點數(shù)或是百分比。浮點數(shù)表示相對于Object的上邊緣,如5; 百分比表示相對于Object的上邊緣,如5%; 另一種百分比表示相對于父容器的上邊緣,如5%p; 一般設(shè)置為50%表示在Object中心
android:duration 表示從android:fromDegrees轉(zhuǎn)動到android:toDegrees所花費的時間,單位為毫秒??梢杂脕碛嬎闼俣?。
android:interpolator表示變化率,但不是運行速度。一個插補屬性,可以將動畫效果設(shè)置為加速,減速,反復(fù),反彈等。默認(rèn)為開始和結(jié)束慢中間快,
android:startOffset 在調(diào)用start函數(shù)之后等待開始運行的時間,單位為毫秒,若為10,表示10ms后開始運行
android:repeatCount 重復(fù)的次數(shù),默認(rèn)為0,必須是int,可以為-1表示不停止
android:repeatMode 重復(fù)的模式,默認(rèn)為restart,即重頭開始重新運行,可以為reverse即從結(jié)束開始向前重新運行。在android:repeatCount大于0或為infinite時生效
android:detachWallpaper 表示是否在壁紙上運行
android:zAdjustment 表示被animated的內(nèi)容在運行時在z軸上的位置,默認(rèn)為normal。
normal保持內(nèi)容當(dāng)前的z軸順序
top運行時在最頂層顯示
bottom運行時在最底層顯示
b. 運行速度
運行速度為運行時間(android:duration)除以運行角度差(android:toDegrees-android:fromDegrees),比如android:duration為1000,android:toDegrees為360,android:fromDegrees為0就表示1秒轉(zhuǎn)1圈。
c. 循環(huán)運行
android:fromDegrees="0"
android:toDegrees="360"
android:repeatCount="-1"
android:repeatCount="-1"即表示循環(huán)運行,配合上android:fromDegrees="0" android:toDegrees="360"表示不間斷
3、開始和停止旋轉(zhuǎn)
在操作開始之前調(diào)用
if (operatingAnim != null) {
infoOperatingIV.startAnimation(operatingAnim);
}
在操作完成時調(diào)用
infoOperatingIV.clearAnimation();
許多朋友不知道如何停止旋轉(zhuǎn)animation,所以強制設(shè)置rotate轉(zhuǎn)動多少圈表示操作,但卻無法與操作實際的進度匹配上,實際上只要如上代碼所示清除animation即可。
其他:
對于上面的轉(zhuǎn)動在橫屏(被設(shè)置為了不重繪activity)時會出現(xiàn)問題,即旋轉(zhuǎn)中心偏移,導(dǎo)致動畫旋轉(zhuǎn)偏離原旋轉(zhuǎn)中心。解決如下
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (operatingAnim != null && infoOperatingIV != null && operatingAnim.hasStarted()) {
infoOperatingIV.clearAnimation();
infoOperatingIV.startAnimation(operatingAnim);
}
}
在新浪微博客戶端中各個操作進行中時activity的右上角都會有個不停旋轉(zhuǎn)的圖標(biāo),類似刷新的效果,給用戶以操作中的提示。這種非模態(tài)的提示方式推薦使用,那么下面就分享下如何實現(xiàn)這種效果吧
1、定義一個ImageView
定義一個ImageView是為了裝載圖片,其中的圖片將被rotate用來進行旋轉(zhuǎn),其他View亦可。
資源文件為
復(fù)制代碼 代碼如下:
<?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為圖片內(nèi)容,可使用附件中的圖片。
java代碼為
復(fù)制代碼 代碼如下:
ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);
2、定義rotate旋轉(zhuǎn)效果
在res/anim文件夾下新建tip.xml文件,內(nèi)容如下
復(fù)制代碼 代碼如下:
<?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度開始循環(huán)旋轉(zhuǎn),0-359(若設(shè)置成360在停止時會出現(xiàn)停頓現(xiàn)象)度旋轉(zhuǎn)所用時間為500ms,旋轉(zhuǎn)中心距離view的左頂點為50%距離,距離view的上邊緣為50%距離,即正中心,具體每個含義見下面的具體屬性介紹。
java代碼為
復(fù)制代碼 代碼如下:
Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);
setInterpolator表示設(shè)置旋轉(zhuǎn)速率。LinearInterpolator為勻速效果,Accelerateinterpolator為加速效果、DecelerateInterpolator為減速效果,具體可見下面android:interpolator的介紹。
a. 關(guān)于其中的屬性意義如下(紅色部分加以注意):
android:fromDegrees 起始的角度度數(shù)
android:toDegrees 結(jié)束的角度度數(shù),負(fù)數(shù)表示逆時針,正數(shù)表示順時針。如10圈則比android:fromDegrees大3600即可
android:pivotX 旋轉(zhuǎn)中心的X坐標(biāo)
浮點數(shù)或是百分比。浮點數(shù)表示相對于Object的左邊緣,如5; 百分比表示相對于Object的左邊緣,如5%; 另一種百分比表示相對于父容器的左邊緣,如5%p; 一般設(shè)置為50%表示在Object中心
android:pivotY 旋轉(zhuǎn)中心的Y坐標(biāo)
浮點數(shù)或是百分比。浮點數(shù)表示相對于Object的上邊緣,如5; 百分比表示相對于Object的上邊緣,如5%; 另一種百分比表示相對于父容器的上邊緣,如5%p; 一般設(shè)置為50%表示在Object中心
android:duration 表示從android:fromDegrees轉(zhuǎn)動到android:toDegrees所花費的時間,單位為毫秒??梢杂脕碛嬎闼俣?。
android:interpolator表示變化率,但不是運行速度。一個插補屬性,可以將動畫效果設(shè)置為加速,減速,反復(fù),反彈等。默認(rèn)為開始和結(jié)束慢中間快,
android:startOffset 在調(diào)用start函數(shù)之后等待開始運行的時間,單位為毫秒,若為10,表示10ms后開始運行
android:repeatCount 重復(fù)的次數(shù),默認(rèn)為0,必須是int,可以為-1表示不停止
android:repeatMode 重復(fù)的模式,默認(rèn)為restart,即重頭開始重新運行,可以為reverse即從結(jié)束開始向前重新運行。在android:repeatCount大于0或為infinite時生效
android:detachWallpaper 表示是否在壁紙上運行
android:zAdjustment 表示被animated的內(nèi)容在運行時在z軸上的位置,默認(rèn)為normal。
normal保持內(nèi)容當(dāng)前的z軸順序
top運行時在最頂層顯示
bottom運行時在最底層顯示
b. 運行速度
運行速度為運行時間(android:duration)除以運行角度差(android:toDegrees-android:fromDegrees),比如android:duration為1000,android:toDegrees為360,android:fromDegrees為0就表示1秒轉(zhuǎn)1圈。
c. 循環(huán)運行
復(fù)制代碼 代碼如下:
android:fromDegrees="0"
android:toDegrees="360"
android:repeatCount="-1"
android:repeatCount="-1"即表示循環(huán)運行,配合上android:fromDegrees="0" android:toDegrees="360"表示不間斷
3、開始和停止旋轉(zhuǎn)
在操作開始之前調(diào)用
復(fù)制代碼 代碼如下:
if (operatingAnim != null) {
infoOperatingIV.startAnimation(operatingAnim);
}
在操作完成時調(diào)用
復(fù)制代碼 代碼如下:
infoOperatingIV.clearAnimation();
許多朋友不知道如何停止旋轉(zhuǎn)animation,所以強制設(shè)置rotate轉(zhuǎn)動多少圈表示操作,但卻無法與操作實際的進度匹配上,實際上只要如上代碼所示清除animation即可。
其他:
對于上面的轉(zhuǎn)動在橫屏(被設(shè)置為了不重繪activity)時會出現(xiàn)問題,即旋轉(zhuǎn)中心偏移,導(dǎo)致動畫旋轉(zhuǎn)偏離原旋轉(zhuǎn)中心。解決如下
復(fù)制代碼 代碼如下:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (operatingAnim != null && infoOperatingIV != null && operatingAnim.hasStarted()) {
infoOperatingIV.clearAnimation();
infoOperatingIV.startAnimation(operatingAnim);
}
}
您可能感興趣的文章:
- Android實現(xiàn)屏幕旋轉(zhuǎn)方法總結(jié)
- Android中利用matrix 控制圖片的旋轉(zhuǎn)、縮放、移動
- Android開發(fā) 旋轉(zhuǎn)屏幕導(dǎo)致Activity重建解決方法
- Android實現(xiàn)圖片反轉(zhuǎn)、翻轉(zhuǎn)、旋轉(zhuǎn)、放大和縮小
- Android編程中調(diào)用Camera時預(yù)覽畫面有旋轉(zhuǎn)問題的解決方法
- Android開發(fā)之圖形圖像與動畫(二)Animation實現(xiàn)圖像的漸變/縮放/位移/旋轉(zhuǎn)
- Android 圖片縮放與旋轉(zhuǎn)的實現(xiàn)詳解
- Android編程實現(xiàn)RotateAnimation設(shè)置中心點旋轉(zhuǎn)動畫效果
- Android部分手機拍照后獲取的圖片被旋轉(zhuǎn)問題的解決方法
- android實現(xiàn)icon動態(tài)旋轉(zhuǎn)效果
相關(guān)文章
在當(dāng)前Activity之上創(chuàng)建懸浮view之WindowManager懸浮窗效果
這篇文章主要介紹了在當(dāng)前Activity之上創(chuàng)建懸浮view之WindowManager懸浮窗效果的相關(guān)資料,需要的朋友可以參考下2016-01-01Android通過HTTP協(xié)議實現(xiàn)上傳文件數(shù)據(jù)
這篇文章主要為大家詳細介紹了Android通過HTTP協(xié)議實現(xiàn)上傳文件數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09Android編程之?dāng)?shù)據(jù)庫的創(chuàng)建方法詳解
這篇文章主要介紹了Android編程之?dāng)?shù)據(jù)庫的創(chuàng)建方法,結(jié)合實例形式分析了Android數(shù)據(jù)庫創(chuàng)建的步驟、實現(xiàn)技巧與相關(guān)注意事項,需要的朋友可以參考下2017-08-08android Animation監(jiān)聽器AnimationListener的使用方法)
AnimaitonListener的使用方法主要是在Animation上設(shè)置一個監(jiān)聽器,下面通過一個實例說明它的使用方法2013-11-11Android自定義ViewGroup打造各種風(fēng)格的SlidingMenu
這篇文章主要介紹了Android自定義ViewGroup打造各種風(fēng)格的SlidingMenu的相關(guān)資料,需要的朋友可以參考下2016-02-02