闲来无事,复习一下知识,今天复习一下帧动画的两种实现方式:代码实现,xml实现,看看效果
1,通过Animation-list实现逐帧动画
首先在drawable下创建一个xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- android:oneshot="false"是否执行一次-->
<item
android:drawable="@mipmap/dianqiu_01"
android:duration="100" />
<item
android:drawable="@mipmap/dianqiu_02"
android:duration="100" />
<item
android:drawable="@mipmap/dianqiu_03"
android:duration="100" />
<item
android:drawable="@mipmap/dianqiu_04"
android:duration="100" />
<item
android:drawable="@mipmap/dianqiu_05"
android:duration="100" />
<item
android:drawable="@mipmap/dianqiu_06"
android:duration="100" />
<item
android:drawable="@mipmap/dianqiu_07"
android:duration="100" />
</animation-list>
android:duration是间隔时间单位毫秒
然后 在Activity或者Fragment中的布局文件中创建一个ImageView,用来设置要播放的动画:
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
最后在代码中3行代码搞定:
imageView = (ImageView) findViewById(R.id.iv);
//xml实现
mAnimation = (AnimationDrawable) getResources().getDrawable(R.drawable.dianqiu);
imageView.setImageDrawable(mAnimation);
mAnimation.start();
2,代码实现帧动画
//动画对象
mAnimation = new AnimationDrawable();
for (int i = 1; i < 22; i++) {
if (i < 10) {
/*
获取应用包下的指定资源ID。
第一个参数为ID名,第二个为资源属性是ID或者是Drawable,第三个为包名。
*/
id = getResources().getIdentifier("bomb0" + i, "mipmap", getPackageName());
} else {
id = getResources().getIdentifier("bomb" + i, "mipmap", getPackageName());
}
//将id装换成drawable对象
Drawable drawable = getResources().getDrawable(id);
//添加动画的drawable对象,设置图片播放的间隔时间
mAnimation.addFrame(drawable, 100);
}
//是否只运行一次
mAnimation.setOneShot(false);
//给imageView设置动画
imageView.setImageDrawable(mAnimation);
mAnimation.start();
最最后,看看Demo代码的具体实现:
package com.duanlian.frameanimationdemo;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private AnimationDrawable mAnimation;
private int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
imageView = (ImageView) findViewById(R.id.iv);
}
public void buttonClick(View view) {
switch (view.getId()) {
case R.id.btn_one:
codeForAnimation();
break;
case R.id.btn_two:
//xml实现
mAnimation = (AnimationDrawable) getResources().getDrawable(R.drawable.dianqiu);
imageView.setImageDrawable(mAnimation);
break;
}
mAnimation.start();
}
/**
* 纯代码实现帧动画
*/
private void codeForAnimation() {
//动画对象
mAnimation = new AnimationDrawable();
for (int i = 1; i < 22; i++) {
if (i < 10) {
/*
获取应用包下的指定资源ID。
第一个参数为ID名,第二个为资源属性是ID或者是Drawable,第三个为包名。
*/
id = getResources().getIdentifier("bomb0" + i, "mipmap", getPackageName());
} else {
id = getResources().getIdentifier("bomb" + i, "mipmap", getPackageName());
}
//将id装换成drawable对象
Drawable drawable = getResources().getDrawable(id);
//添加动画的drawable对象,设置图片播放的间隔时间
mAnimation.addFrame(drawable, 100);
}
//是否只运行一次
mAnimation.setOneShot(false);
//给imageView设置动画
imageView.setImageDrawable(mAnimation);
}
}
demo下载地址:下载地址