逐帧动画(Frame-by-frame Animations)顾名思义就是一帧接着一帧的播放图片,就像放电影一样。可以通过xml实现也可以通过java代码实现。逐帧动画适合实现比较简单的动画效果,如果要实现复杂动画不太建议使用逐帧动画。
xml方式实现:
step 1 : 在res/drawable目录下一个文件sample_animlist.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="@mipmap/sample_1"
android:duration="100" />
<item
android:drawable="@mipmap/sample_2"
android:duration="100" />
<item
android:drawable="@mipmap/sample_3"
android:duration="100" />
<item
android:drawable="@mipmap/sample_4"
android:duration="100" />
<item
android:drawable="@mipmap/sample_5"
android:duration="100" />
<item
android:drawable="@mipmap/sample_6"
android:duration="100" />
</animation-list>
动画列表(animation-list)由一个或者多个item节点组成,item节点用来声明一个动画帧
drawable: 该帧的图片资源
duration : 播放时间 单位为毫秒
oneshot : 是否只播放一次,true表示只会播放一次,false表示一直循环播放
step 2:
利用ImageView作为播放载体
<ImageView
android:id="@+id/iv_ani"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sample_animlist" />
step3: 在Activity实现初始化 、暂停、播放。
public class MainActivity extends AppCompatActivity {
private ImageView iv_ani;
private AnimationDrawable mAnimationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_ani = (ImageView) findViewById(R.id.iv_ani);
mAnimationDrawable = (AnimationDrawable) iv_ani.getDrawable();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//window初始化完毕 开始播放动画
animationStart();
}
@Override
protected void onPause() {
animationStop();
super.onPause();
}
private void animationStart() {
if (null != mAnimationDrawable)
mAnimationDrawable.start();//开始播放
}
private void animationStop() {
if (null != mAnimationDrawable)
mAnimationDrawable.stop();//暂停播放
}
}
纯Java方式实现
public class MainActivity extends AppCompatActivity {
private ImageView iv_ani;
private AnimationDrawable mAnimationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_ani = (ImageView) findViewById(R.id.iv_ani);
initAnimationDrawable();
}
private void initAnimationDrawable(){
mAnimationDrawable = new AnimationDrawable();
for (int i = 1; i <= 4; i++) {
int id = getResources().getIdentifier("sample_" + i, "mipmap", getPackageName());
Drawable drawable = getResources().getDrawable(id);
mAnimationDrawable.addFrame(drawable, 100);
}
mAnimationDrawable.setOneShot(false);
iv_ani.setImageDrawable(mAnimationDrawable);
}
}
addFrame(Drawable frame, int duration) : 添加一帧,并设置该帧显示的持续时间
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。