Android 圍繞中心旋轉(zhuǎn)動畫

本文主要介紹Android中如何使用rotate實現(xiàn)圖片不停旋轉(zhuǎn)的效果昏翰。Android 平臺提供了兩類動畫别洪,一類是 Tween 動畫屏积,即通過對場景里的對象不斷做圖像變換(平移勃蜘、縮放玄坦、旋轉(zhuǎn))產(chǎn)生動畫效果嫩挤;第二類是 Frame 動畫害幅,即順序播放事先做好的圖像,跟電影類似岂昭。

1、定義一個ImageView

定義一個ImageView是為了裝載圖片狠怨,其中的圖片將被rotate用來進行旋轉(zhuǎn)约啊,其他View亦可。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/air_condition"/>

</RelativeLayout>

其中的android:src為圖片內(nèi)容佣赖,可使用附件中的圖片恰矩。

2、定義rotate旋轉(zhuǎn)效果

在res/anim文件夾下新建rotate_anim.xml文件憎蛤,內(nèi)容如下

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:drawable="@drawable/air_condition"
        android:fromDegrees="0"
        android:toDegrees="359"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="1000"
        android:repeatCount="-1">
    </rotate>
</rotate>

含義表示從0到359度開始循環(huán)旋轉(zhuǎn)外傅,0-359(若設(shè)置成360在停止時會出現(xiàn)停頓現(xiàn)象)度旋轉(zhuǎn)所用時間為500ms,旋轉(zhuǎn)中心距離view的左頂點為50%距離俩檬,距離view的上邊緣為50%距離萎胰,即正中心,具體每個含義見下面的具體屬性介紹棚辽。

Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);  
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)用

Animation rotate = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
if (rotate != null) {  
    img.startAnimation(rotate);  
}  else {
    img.setAnimation(rotate);
    img.startAnimation(rotate);  
}

在操作完成時調(diào)用

img.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);  
    }  
} 

4用Java codes同樣也能實現(xiàn)相同的效果

RotateAnimation rotate  = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        LinearInterpolator lin = new LinearInterpolator();  
        rotate.setInterpolator(lin);
        rotate.setDuration(2000);//設(shè)置動畫持續(xù)周期
        rotate.setRepeatCount(-1);//設(shè)置重復(fù)次數(shù)
        rotate.setFillAfter(true);//動畫執(zhí)行完后是否停留在執(zhí)行完的狀態(tài) 
        rotate.setStartOffset(10);//執(zhí)行前的等待時間 
        img.setAnimation(rotate); 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呆抑,隨后出現(xiàn)的幾起案子岂嗓,更是在濱河造成了極大的恐慌,老刑警劉巖鹊碍,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厌殉,死亡現(xiàn)場離奇詭異食绿,居然都是意外死亡,警方通過查閱死者的電腦和手機公罕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門器紧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人楼眷,你說我怎么就攤上這事铲汪。” “怎么了摩桶?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵桥状,是天一觀的道長。 經(jīng)常有香客問我硝清,道長,這世上最難降的妖魔是什么转晰? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任芦拿,我火速辦了婚禮,結(jié)果婚禮上查邢,老公的妹妹穿的比我還像新娘蔗崎。我一直安慰自己,他們只是感情好扰藕,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布缓苛。 她就那樣靜靜地躺著,像睡著了一般邓深。 火紅的嫁衣襯著肌膚如雪未桥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天芥备,我揣著相機與錄音冬耿,去河邊找鬼。 笑死萌壳,一個胖子當(dāng)著我的面吹牛亦镶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袱瓮,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缤骨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尺借?” 一聲冷哼從身側(cè)響起绊起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褐望,沒想到半個月后勒庄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體串前,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年实蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了荡碾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡局装,死狀恐怖坛吁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铐尚,我是刑警寧澤拨脉,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宣增,受9級特大地震影響玫膀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爹脾,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一帖旨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灵妨,春花似錦解阅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朱转,卻和暖如春蟹地,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肋拔。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工锈津, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凉蜂。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓琼梆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窿吩。 傳聞我的和親對象是個殘疾皇子茎杂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容