1、前言
在我們Android開發當中,用戶的交互佔了很大的比重,而動畫在用戶看來,是很好的用戶體驗,也就是說如果掌握了動畫,在UI方面,就可以實現很炫酷的效果,
我是劉酸酸,今天第一次開博,將會寫關於Android動畫的一個專題,希望大家多多支持,有不對的地方可以在下方留言,我們一起進步,一起快樂的碼代碼。
2、正文
1、關於Android動畫的總體的介紹,
Android當中的動畫,主要分爲Frame(逐幀動畫),View動畫(補間動畫),Property動畫(屬性動畫),
1、Frame(逐幀動畫):做過視頻的應該都知道,動作在某一瞬間就是一張圖片,而這一張圖片叫做這個視頻的一幀,而幀動畫就是在Drawable資源目錄下去定義一系列的圖片,而Android內部則讓這一系列的圖片動起來,就是所謂的幀動畫,逐幀動畫可以被定義在XML文件當中,也可以完全編碼實現。
2、View動畫(補間動畫):通過對View的內容實現了一系列的圖形變換操作,通過平移,縮放,旋轉,改變透明度來實現動畫的效果,在實現方面,可以通過XML文件來實現,也可以通過代碼來實現
3、Property動畫(屬性動畫):這個先略過,我們會在下一節當中詳細講解
2、通過Frame(逐幀動畫)去實現一個動畫。
1、通過XML去定義Drawable資源文件,通常我們會在/res目錄下的anim或者drawable目錄下定義一個自己的文件,樓主我目錄爲/res/drawable/loading_bg.xml
注意:我們需要把所用到的圖片放在drawable下,
<span style="font-size:14px;"><?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/loading00" android:duration="100"/>
<item android:drawable="@drawable/loading01" android:duration="100"/>
<item android:drawable="@drawable/loading02" android:duration="100"/>
<item android:drawable="@drawable/loading03" android:duration="100"/>
<item android:drawable="@drawable/loading04" android:duration="100"/>
<item android:drawable="@drawable/loading05" android:duration="100"/>
<item android:drawable="@drawable/loading06" android:duration="100"/>
<item android:drawable="@drawable/loading07" android:duration="100"/>
<item android:drawable="@drawable/loading08" android:duration="100"/>
<item android:drawable="@drawable/loading09" android:duration="100"/>
<item android:drawable="@drawable/loading10" android:duration="100"/>
<item android:drawable="@drawable/loading11" android:duration="100"/>
<item android:drawable="@drawable/loading12" android:duration="100"/>
<item android:drawable="@drawable/loading13" android:duration="100"/>
<item android:drawable="@drawable/loading14" android:duration="100"/>
<item android:drawable="@drawable/loading15" android:duration="100"/>
<item android:drawable="@drawable/loading16" android:duration="100"/>
<item android:drawable="@drawable/loading17" android:duration="100"/>
<item android:drawable="@drawable/loading18" android:duration="100"/>
<item android:drawable="@drawable/loading19" android:duration="100"/>
<item android:drawable="@drawable/loading20" android:duration="100"/>
<item android:drawable="@drawable/loading21" android:duration="100"/>
<item android:drawable="@drawable/loading22" android:duration="100"/>
<item android:drawable="@drawable/loading23" android:duration="100"/>
<item android:drawable="@drawable/loading24" android:duration="100"/>
<item android:drawable="@drawable/loading25" android:duration="100"/>
<item android:drawable="@drawable/loading26" android:duration="100"/>
<item android:drawable="@drawable/loading27" android:duration="100"/>
<item android:drawable="@drawable/loading28" android:duration="100"/>
<item android:drawable="@drawable/loading29" android:duration="100"/>
<item android:drawable="@drawable/loading30" android:duration="100"/>
<item android:drawable="@drawable/loading31" android:duration="100"/>
<item android:drawable="@drawable/loading32" android:duration="100"/>
<item android:drawable="@drawable/loading33" android:duration="100"/>
<item android:drawable="@drawable/loading34" android:duration="100"/>
</animation-list>
</span>
<animation-list>元素是必須的,並且必須要作爲根元素,可以包含一或多個<item>元素;
android:onshot如果定義爲true的話,此動畫只會執行一次,如果爲false則一直循環。
<item>元素代表一幀動畫,
android:drawable指定此幀動畫所對應的圖片資源,
android:druation代表此幀持續的時間,整數,單位爲毫秒。
<layer-list>:是圖層的意思,就是一個幀可以使用兩張圖片,而效果就是兩張圖片疊加在一塊,
2、我們在自己的Activity的layout(/res/layout/activity_main.xml)文件當中引入自己的資源文件
<span style="font-size:14px;"> <ImageView
android:id="@+id/iv"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_centerInParent="true"
android:background="@drawable/loading_bg"
android:visibility="gone" />
</span>
大家可以理解爲,我在這裏去設置了一個載體,我們通過這個載體去播放動畫,注意我在background屬性引入了我的動畫,3、在Activity當中使用AnimationDrawable類去開始我們的動畫就OK了
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
ImageView imageView = (ImageView) findViewById(R.id.iv);
AnimationDrawable anim = (AnimationDrawable) imageView.getBackground();
anim.start();
}
4、當然我們有的時候需要動態的給AnimationDrawable動畫當中去動態的去添加我們所說的幀,那麼我們不用去定義Drawable的動畫資源了
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
ImageView imageView = (ImageView) findViewById(R.id.iv);
AnimationDrawable animationDrawable = new AnimationDrawable();
for(int i = 0; i < 35; i++){
String name = i < 10 ? "0"+i : i+"";
//根據資源名稱和目錄獲取R.java中對應的資源ID
int drawableId = getResources().getIdentifier("loading"+name, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(drawableId);
animationDrawable.addFrame(drawable, 100);
}
animationDrawable.setOneShot(false);
imageView.setBackgroundDrawable(animationDrawable);
// imageView.setBackground(animationDrawable);
animationDrawable.start();
}
樓主做的Demo是仿照音悅臺App的加載框,大家可以看一下效果
明天晚上(2016/11/2)給大家講解View動畫,也就是Tween動畫
希望大家多多支持,有錯指出,