Frame Animation (又叫Drawable Animation),类似于电影的播放,是一帧一帧的播放不同的图像序列!
AnimationDrawable 是帧动画的核心实现类!
相比较在代码中庸AnimationDrawable实现帧动画,用xml的方式更加方便且易于维护和修改!
- 在res/drawable/路径下面定义xml文件。定义构成帧动画的不同图像的顺序和持续时间。 animation-list 作为xml的根元素,item表示每个帧的图像资源和持续时间
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:duration="300"
android:drawable="@drawable/krystal01">
</item>
<item
android:duration="300"
android:drawable="@drawable/krystal02">
</item>
<item
android:duration="300"
android:drawable="@drawable/krystal03">
</item>
<item
android:duration="300"
android:drawable="@drawable/krystal04">
</item>
</animation-list>
- 在代码中为View设置并启动帧动画
package com.example.frameanimation;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.os.Build;
public class MainActivity extends Activity {
private ImageView imageView;
// 帧动画
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView1);
// 将帧动画设置为imageView的背景,然后启动动画
imageView.setBackgroundResource(R.drawable.rocket_thrust);
animationDrawable = (AnimationDrawable) imageView.getBackground();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// 帧动画的 start()方法,不能再onCreate()方法中执行,因为AnimationDrawable还没有连接到Window
// 如果你想要立即执行动画,你可以在activity的 onWindowFocusChanged() 调用start()方法,当window获得焦点就会执行
animationDrawable.start();
return true;
}
return super.onTouchEvent(event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
- 运行结果