心得体会
- 前一阵子,由于电脑的原因,简书听了好一阵子没写~~,接下来我会陆续把我欠的补回来的。关键帧动画(FrameAnimation)相对还是比较简单的, 它只能实现比较小的动画效果,如果复杂而且帧数比较多的动画不太建议使用逐帧动画
目录
-
1.关键帧动画简介
-
2.关键帧动画具体实现过程
具体内容
一、关键帧动画简介:
- 关键帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。
- 这种动画更多的依赖于完善的UI资源,原理就是将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效果;有点类似于某些软件制作gif动画的方式
二、关键帧动画具体实现过程
-
1.使用xml配置动画(动画是固定)
1.将所需图片资源拖到res/drawable里面
2.在res/drawable目录下新建一个Drawable resource file文件
<?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/campfire01"
android:duration="200"/>
<item android:drawable="@drawable/campfire02"
android:duration="200"/>
<item android:drawable="@drawable/campfire03"
android:duration="200"/>
<item android:drawable="@drawable/campfire04"
android:duration="200"/>
<item android:drawable="@drawable/campfire05"
android:duration="200"/>
<item android:drawable="@drawable/campfire06"
android:duration="200"/>
<item android:drawable="@drawable/campfire07"
android:duration="200"/>
<item android:drawable="@drawable/campfire08"
android:duration="200"/>
<item android:drawable="@drawable/campfire09"
android:duration="200"/>
<item android:drawable="@drawable/campfire10"
android:duration="200"/>
<item android:drawable="@drawable/campfire11"
android:duration="200"/>
<item android:drawable="@drawable/campfire12"
android:duration="200"/>
<item android:drawable="@drawable/campfire13"
android:duration="200"/>
<item android:drawable="@drawable/campfire14"
android:duration="200"/>
<item android:drawable="@drawable/campfire15"
android:duration="200"/>
<item android:drawable="@drawable/campfire16"
android:duration="200"/>
<item android:drawable="@drawable/campfire17"
android:duration="200"/>
</animation-list>
**关键帧动画配置文件所需根节点是animation-list(动画列表),里面有一个或者多个item节点组成
其中:
oneshot
属性表示是否只播放一次,true表示只会播放一次,false表示一直循环播放,- 一个
item
对应一帧:即一张图片android:drawable
:配置动画的图片android:druation
代表此帧持续的时间,整数,单位为毫秒**
3.在 activity_main.xml里面用ImageView控件作为动画载体来显示动画
<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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv_anim"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/fire_anim"
android:scaleType="fitXY"/>
</RelativeLayout>
4.在MainActivity.java里面启动动画
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
//获取动画的控件
ImageView iv=findViewById(R.id.iv_anim);
//2.通过控件获取动画
AnimationDrawable anim=(AnimationDrawable)iv.getDrawable();
//3.启动动画
anim.start();
}
return true;
}
}
-
2.使用代码创建(在运行过程中有变化)
1.在 activity_main.xml里面用ImageView控件作为动画载体来显示动画
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv_anim"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/campfire01"
android:scaleType="fitXY"/>
</RelativeLayout>
2.在MainActivity.java里面启动动画
public class MainActivity extends AppCompatActivity {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.创建一个动画资源
AnimationDrawable anim = new AnimationDrawable();
//2.添加每一帧的动画
int[] resID = {R.drawable.campfire01, R.drawable.campfire02, R.drawable.campfire03,
R.drawable.campfire04, R.drawable.campfire05, R.drawable.campfire06,
R.drawable.campfire07, R.drawable.campfire08, R.drawable.campfire09,
R.drawable.campfire10, R.drawable.campfire11, R.drawable.campfire12,
R.drawable.campfire13, R.drawable.campfire14, R.drawable.campfire15,
R.drawable.campfire16, R.drawable.campfire17};
for (int id:resID) {
anim.addFrame(getResources().getDrawable(id,
null),
100);
}
//3.使用这个动画资源
ImageView iv=findViewById(R.id.iv_anim);
iv.setImageDrawable(anim);
//4.启动动画
anim.start();
}
void start()
- 开始播放动画
void stop()
- 停止播放动画
addFrame(Drawable frame, int duration)
- 添加一帧,并设置该帧显示的持续时间
boolean isRunning()
- 是否正在播放