項目有一個需求,有一個刷新按鈕,上面放着一個常見的靜止的刷新圓圈,如下圖:
一旦用戶按了刷新按鈕,需要讓這個刷新圓圈轉動起來,讓用戶感覺到程序還在運行着,而不是卡死了。
有兩個思路,一是將這個圖按照旋轉時間不同旋轉成不同旋轉角度的圖片,就像要做一張gif圖片一樣,例如我要每次旋轉30度,就需要360\30=12張圖片,然後再anim文件夾下新建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>
在代碼中這樣寫:
- 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
這種做法其實就是將每一幀圖片都顯示了一次,但是由於需要更多圖片,文件體積會上升。
於是想到用rotate做單幀圖片旋轉,查到的資料:http://rainbowsu.iteye.com/blog/766608
但是作者沒能實現循環旋轉,我嘗試了下,修改了下anim文件的格式,成功了
- <?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"表示旋轉速率是1秒鐘。
代碼:
- 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);
- }
- }
佈局文件:
- <?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>