本篇主要爲Android Animation分析
導讀:
1.Animation是什麼?
2.Animation分類
3.Tween Animation
4.監聽器和插值器
5. LayoutAnimationsController
6.Frame-By-Frame Animation
7.Property Animation
8.總結
五.LayoutAnimationsController
1、LayoutAnimationsController定義:爲layout裏的控件,或者是viewgroup裏面的控件設置動畫效果, 每一個控件都有相同的動畫, 動畫效果可以在不同的時間顯示出來,可以在java裏面設置,也可以在xml中設置
2.使用方法一:(以listview舉例)
在res/anim中創建item——anim文件和layout.xml文件,分別如下:
<!--創建動畫-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1"
android:duration="800"
/>
</set>
<!--控制-->
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.2"
android:animationOrder="random"
android:animation="@anim/item_anim"
>
</layoutAnimation>
<!--代碼含義:
delay:設置顯示延時
Order:設置顯示方式(另外還有normal和reverse兩種方式)
animation:動畫文件
-->
然後在xml爲listview添加如下配置android:layoutAnimation=”@anim/layout”
這樣子就ok了。
使用方法二:
獲取到listview對象後,添加以下代碼:
//創建Animation對象
Animation animation=(Animation) AnimationUtils.loadAnimation(ScrollingActivity.this,R.anim.item_anim);
LayoutAnimationController layoutAnimationController=new LayoutAnimationController(animation);
//設置相關屬性 layoutAnimationController.setOrder(LayoutAnimationController.ORDER_NORMAL);
//配置動畫
listView.setAnimation(layoutAnimationController);
六.Frame-By-Frame Animation
Frame動畫是一系列圖片按照一定的順序展示的過程,和放電影的機制很相似,我們稱爲逐幀動畫。Frame動畫可以被定義在XML文件中,也可以完全編碼實現。
具體步驟:
1.設置好要展示的佈局(例如可以添加一個imageView佔位,兩個button用於開始和停止動畫)
2.在drawable目錄下放置動畫圖片(Flash每一幀的圖片)
例如我放了一個loading進度條的每一幀圖片。
3.在drawable目錄下添加anim_test.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/loading_1" android:duration="80" />
<item android:drawable="@drawable/loading_2" android:duration="80" />
<item android:drawable="@drawable/loading_3" android:duration="80" />
<item android:drawable="@drawable/loading_4" android:duration="80" />
<item android:drawable="@drawable/loading_5" android:duration="80" />
<item android:drawable="@drawable/loading_6" android:duration="80" />
<item android:drawable="@drawable/loading_7" android:duration="80" />
<item android:drawable="@drawable/loading_8" android:duration="80" />
<!--oneshot設置true爲1次,false爲多次-->
</animation-list>
4.在java中配置動畫
按鈕監聽器裏添加
imageView.setBackgroundResource(R.anim.anim_test);
AnimationDrawable animationDrawable = (AnimationDrawable)
imageView.getBackground();
animationDrawable.start();
逐幀動畫同樣有java實現的方法
//完全編碼實現的動畫效果
AnimationDrawable anim = new AnimationDrawable();
for (int i = 1; i <= 4; i++) {
//根據資源名稱和目錄獲取R.java中對應的資源ID
int id = getResources().getIdentifier("f" + i, "drawable", getPackageName());
//根據資源ID獲取到Drawable對象
Drawable drawable = getResources().getDrawable(id);
//將此幀添加到AnimationDrawable中
anim.addFrame(drawable, 300);
}
anim.setOneShot(false); //設置爲loop
image.setBackgroundDrawable(anim); //將動畫設置爲ImageView背景
anim.start(); //開始動畫
//anim.stop();//停止動畫
此部分java代碼還可以封裝起來達到多次利用的效果。
七.Property Animation
對於屬性動畫,下面是郭神的幾篇文章,講解的很好,大家可以參考一下
Android屬性動畫完全解析(上),初識屬性動畫的基本用法
Android屬性動畫完全解析(中),ValueAnimator和ObjectAnimator的高級用法
Android屬性動畫完全解析(下),Interpolator和ViewPropertyAnimator的用法
轉載自郭霖的博客:CSDN博客
八.總結
本文參考:Mars Android視頻第二季 和 我的github博客
如有錯誤,請在留言區指出。