準備寫幾篇博客講解Android的動畫,首先介紹Android動畫的整體輪廓。
Android動畫主要分爲三大類
- View Animation
- Drawable Animation
- Property Animation
- <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="true">
- <item android:drawable="@drawable/frame_1" android:duration="200" />
- <item android:drawable="@drawable/frame_2" android:duration="200" />
- <item android:drawable="@drawable/frame_3" android:duration="200" />
- <item android:drawable="@drawable/frame_4" android:duration="200" />
- </animation-list>
其中android:oneshot=“true”表示該動畫只播放一次,等於false時則循環播放。<item/>標籤定義各個幀顯示的圖片。顯示順序依照<item/>定義順序。下面介紹一個實際場景,即平時我們常見的加載界面,
- <?xml version="1.0" encoding="UTF-8"?>
- <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false">
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_00" />
- <item android:drawable="@drawable/login_loading_10" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_01" />
- <item android:drawable="@drawable/login_loading_11" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_02" />
- <item android:drawable="@drawable/login_loading_12" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_03" />
- <item android:drawable="@drawable/login_loading_13" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_04" />
- <item android:drawable="@drawable/login_loading_14" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_05" />
- <item android:drawable="@drawable/login_loading_15" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_06" />
- <item android:drawable="@drawable/login_loading_16" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_07" />
- <item android:drawable="@drawable/login_loading_17" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_08" />
- <item android:drawable="@drawable/login_loading_18" />
- </layer-list>
- </item>
- <item android:duration="100">
- <layer-list>
- <item android:drawable="@drawable/login_loading_09" />
- <item android:drawable="@drawable/login_loading_19" />
- </layer-list>
- </item>
- </animation-list>
以上xml文件與前面一個xml文件不大同,多了一個<layer-list/>標籤,該標籤用法很簡單,<layer-list/>內包含的圖片將層疊起來,在同一幀中一起顯示。如下:
- public class MainActivity extends Activity {
- private AnimationDrawable loadingAnimation;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.activity_main);
- //將該逐幀xml文件設置爲ImageView的背景
- ImageView loadingImg = (ImageView) findViewById(R.id.loading);
- loadingImg.setBackgroundResource(R.drawable.loading);
- loadingAnimation = (AnimationDrawable) loadingImg.getBackground();
- }
- /**
- * 觸摸屏幕,結束動畫
- */
- public boolean onTouchEvent(MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- loadingAnimation.stop();
- return true;
- }
- return super.onTouchEvent(event);
- }
- /**
- * activity顯示到屏幕則開啓動畫
- */
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- // TODO Auto-generated method stub
- super.onWindowFocusChanged(hasFocus);
- if (hasFocus)
- loadingAnimation.start();
- }
- }
效果圖如下,其中圖片素材取材於OSchina的開源項目。