生活随笔
收集整理的這篇文章主要介紹了
android动画Rotate
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
項(xiàng)目有一個(gè)需求,有一個(gè)刷新按鈕,上面放著一個(gè)常見的靜止的刷新圓圈,如下圖:
?
?
一旦用戶按了刷新按鈕,需要讓這個(gè)刷新圓圈轉(zhuǎn)動(dòng)起來,讓用戶感覺到程序還在運(yùn)行著,而不是卡死了。
?
有兩個(gè)思路,一是將這個(gè)圖按照旋轉(zhuǎn)時(shí)間不同旋轉(zhuǎn)成不同旋轉(zhuǎn)角度的圖片,就像要做一張gif圖片一樣,例如我要每次旋轉(zhuǎn)30度,就需要360\30=12張圖片,然后再anim文件夾下新建xml文件,內(nèi)容如下:
?
Xml代碼 ?
<animation-list?xmlns:android="http://schemas.android.com/apk/res/android"?? ????android:oneshot="true">?? ????<item?android:drawable="@drawable/rocket_thrust1"?android:duration="200"?/>?? ????<item?android:drawable="@drawable/rocket_thrust2"?android:duration="200"?/>?? ????<item?android:drawable="@drawable/rocket_thrust3"?android:duration="200"?/>?? </animation-list>?? <animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true"><item android:drawable="@drawable/rocket_thrust1" android:duration="200" /><item android:drawable="@drawable/rocket_thrust2" android:duration="200" /><item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
?
?
在代碼中這樣寫:
?
Java代碼 ?
AnimationDrawable?rocketAnimation; ?? ?? public?void?onCreate(Bundle?savedInstanceState)?{ ?? ??super.onCreate(savedInstanceState); ?? ??setContentView(R.layout.main); ?? ?? ??ImageView?rocketImage?=?(ImageView)?findViewById(R.id.rocket_image); ?? ??rocketImage.setBackgroundResource(R.anim.rocket_thrust); ?? ??rocketAnimation?=?(AnimationDrawable)?rocketImage.getBackground(); ?? } ?? ?? public?boolean?onTouchEvent(MotionEvent?event)?{ ?? ??if?(event.getAction()?==?MotionEvent.ACTION_DOWN)?{ ?? ????rocketAnimation.start(); ?? ????return?true; ?? ??} ?? ??return?super.onTouchEvent(event); ?? }?? AnimationDrawable rocketAnimation;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);rocketImage.setBackgroundResource(R.anim.rocket_thrust);rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}public boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {rocketAnimation.start();return true;}return super.onTouchEvent(event);
}
?
具體代碼含義參考:http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html
?
?
這種做法其實(shí)就是將每一幀圖片都顯示了一次,但是由于需要更多圖片,文件體積會(huì)上升。
?
于是想到用rotate做單幀圖片旋轉(zhuǎn),查到的資料:http://rainbowsu.iteye.com/blog/766608
?
但是作者沒能實(shí)現(xiàn)循環(huán)旋轉(zhuǎn),我嘗試了下,修改了下anim文件的格式,成功了
?
Xml代碼 ?
<?xml?version="1.0"?encoding="utf-8"?>?? <rotate?xmlns:android="http://schemas.android.com/apk/res/android"?android:interpolator="@android :anim/linear_interpolator"?? ????android:fromDegrees="0"?android:toDegrees="+360"?android:duration="1000"?? ????android:pivotX="50%"?android:pivotY="50%"?android:repeatCount="infinite"?/>?? <?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator"android:fromDegrees="0" android:toDegrees="+360" android:duration="1000"android:pivotX="50%" android:pivotY="50%" android:repeatCount="infinite" />
?
?
其中android:duration="1000"表示旋轉(zhuǎn)速率是1秒鐘。
?
代碼:
?
Java代碼 ?
package?info.wegosoft; ?? ?? import?android.app.Activity; ?? import?android.os.Bundle; ?? import?android.view.animation.Animation; ?? import?android.view.animation.AnimationUtils; ?? ?? public?class?LoadingAnimationTest?extends?Activity?{ ?? ????/**?Called?when?the?activity?is?first?created.?*/?? ????@Override?? ????public?void?onCreate(Bundle?savedInstanceState)?{ ?? ????????super.onCreate(savedInstanceState); ?? ????????setContentView(R.layout.main); ?? ???????? ?? ????????Animation?anim?=?AnimationUtils.loadAnimation(this,?R.anim.round_loading);???? ?? ???????? ?? ????????findViewById(R.id.loadingBtn).startAnimation(anim);??? ?? ????} ?? }?? package info.wegosoft;import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;public class LoadingAnimationTest extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Animation anim = AnimationUtils.loadAnimation(this, R.anim.round_loading); findViewById(R.id.loadingBtn).startAnimation(anim); }
}
?
布局文件:
?
Java代碼 ?
<?xml?version="1.0"?encoding="utf-8"?> ?? <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????android:orientation="vertical"?android:layout_width="fill_parent"?? ????android:layout_height="fill_parent"> ?? ????<Button?android:id="@+id/loadingBtn"?android:layout_width="wrap_content"?? ????????android:layout_height="wrap_content"?android:background="@drawable/refresh_normal"></Button> ?? </LinearLayout>?? <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><Button android:id="@+id/loadingBtn" android:layout_width="wrap_content"android:layout_height="wrap_content" android:background="@drawable/refresh_normal"></Button>
</LinearLayout>
?
?
工程見附件。
?
最后提供官方文檔相關(guān)說明的鏈接:http://developer.android.com/guide/topics/resources/animation-resource.html
?
注意其中的勻速插值器LinearInterpolator似乎不能設(shè)置速率,我在這浪費(fèi)了很多時(shí)間。
轉(zhuǎn)載于:https://my.oschina.net/u/586684/blog/170406
總結(jié)
以上是生活随笔為你收集整理的android动画Rotate的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。