所謂的逐幀動畫,在我的理解並能不算是動畫,它的實現是一系列相似的圖片播放得出的效果.類似於幻燈片,附上實際效果圖:
第一步:
你需要一系列圖片,模擬動畫,圖片已上傳.把這些圖片放在drawable目錄下.選中drawable右鍵選擇new–>Drawable resource file
名字隨便取,Root element 選擇animation-list
wifi_animation代碼如下:
<?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/wifi_icon1" android:duration="100"></item>
<item android:drawable="@drawable/wifi_icon2" android:duration="100"></item>
<item android:drawable="@drawable/wifi_icon3" android:duration="100"></item>
<item android:drawable="@drawable/wifi_icon4" android:duration="100"></item>
<item android:drawable="@drawable/wifi_icon5" android:duration="100"></item>
<item android:drawable="@drawable/wifi_icon6" android:duration="100"></item>
<!--
android:oneshot="false" 表示循環播放, 當爲true的時候,播放到最後
一張圖片會停止
android:duration="100" 表示播放時長單位爲毫秒
<item></item>的順序是動畫播放的順序
-->
</animation-list>
第二步:
activity_main.xml中拖一個ImageView和兩個Button(Button控制動畫的播放與停止),注意ImageView的src屬性是你定義的animation-list.代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="myself.myapplication.MainActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/wifi_animation"
android:layout_marginTop="86dp"
android:id="@+id/imageView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
android:text="@string/fram"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="85dp"
android:id="@+id/button"
android:layout_below="@+id/imageView"
android:layout_centerHorizontal="true" />
<Button
android:text="@string/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button"
android:layout_marginTop="43dp"
android:id="@+id/button2" />
</RelativeLayout>
第三步:
編寫MainActivity.Java,代碼如下:
package myself.myapplication;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button b1,b2;
private ImageView imageView;
/**
*實現逐幀動畫必須用到的類,
*AnimationDrawable 繼承自 DrawableContainer類
* DrawableContainer類繼承自Drawable類
* 我們在drawable目錄下定義的動畫須通過該類得到
*/
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button);
b2 = (Button) findViewById(R.id.button2);
imageView = (ImageView) findViewById(R.id.imageView);
//逐幀動畫對象是通過imageView得到的,因爲ImageView是動畫顯示的載體
animationDrawable = (AnimationDrawable) imageView.getDrawable();
//啓動按鈕點擊事件
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//匹配播放和停止按鈕的點擊事件
switch (v.getId()) {
case R.id.button:
//如果動畫沒有在播放,就播放動畫
if (!animationDrawable.isRunning()){
animationDrawable.start();
}
break;
case R.id.button2:
//如果動畫正在播放,就停止播放動畫
if (animationDrawable.isRunning()) {
animationDrawable.stop();
}
break;
}
}
}
項目素材: