Android三种动画
三方:https://blog.csdn.net/zuo_er_lyf/article/details/79716840
Android动画分三类:帧动画(frame animation),补间动画(tween animation),属性动画(property animation)
一、帧动画(frame animation)
1、作用对象:视图控件(view)
1.如Android的TextView、Button等等
2.不可作用于View组件的属性,如:颜色、背景、长度等等
2、原理
- 将动画拆分成帧的形式,每一帧对应一张图片
- 本质就是:按顺序播放一组预先定义好的图片
3、具体使用
步骤①:将序列图片放到drawable中
步骤②:设置启动动画:Java和xml
方式一:XML实现
- step1 在res/drawable中创建动画效果.XML文件
- step2 设置动画资源
music_anim.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="@drawable/sound_00030"
android:duration="100" />
<item
android:drawable="@drawable/sound_00031"
android:duration="100" />
</animation-list>
- step3 在Java代码中 载入&启动
public class MainActivity extends AppCompatActivity {
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageview = (ImageView) findViewById(R.id.imageview);
Button btn_start = (Button) findViewById(R.id.btn_start);
Button btn_stop = (Button) findViewById(R.id.btn_stop);
//开启动画
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//设置动画
imageview.setImageResource(R.drawable.music_anim);
//获取动画对象
animationDrawable = (AnimationDrawable) imageview.getDrawable();
//开启动画
animationDrawable.start();
}
});
//停止动画
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
animationDrawable.stop();
}
});
}
}
方式2:在Java代码中实现
animationDrawable = new AnimationDrawable();
for (int i = 30; i <= 59; i++) {
int id = getResources().getIdentifier("sound" + i, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
animationDrawable.addFrame(drawable, 1);
}
// <--开始动画-- >
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
animationDrawable.setOneShot(false);
imageview.setImageDrawable(animationDrawable);
// 获取资源对象
animationDrawable.stop(); // 特别注意:在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次
animationDrawable.start(); // 启动动画 } });
}
});
// <-- 停止动画 -->
btn_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animationDrawable.stop();
}
});
4、特点
- 优点:使用简单、方便
- 缺点: 容易引起 OOM,因为会使用大量 & 尺寸较大的图片资源
使用时一定注意避免使用大图片,否则会引起OOM
5、应用场景
- 较为复杂的个性化动画效果。
二、补间动画
1、作用对象
- 视图 (view)
1.如Android的TextView、Button等等
2.不可作用于View组件的属性,如:颜色、背景、长度等等
2、原理
- 通过确定开始视图样式&结束视图样式、中间动画变化过程由系统补全来确定一个动画
动效样式有:translation、alpha、scale、rotate
涉及到四个类:TranslateAnimation、AlphaAnimation、RotateAnimation、ScaleAnimation
3、具体使用
- 补间动画使用方式分两种:Java代码&xml中实现
前者优点:动画描述的可读性更好
后者优点:动画效果可动态创建
3.1 平移动画(translate)
方式一:xml中实现
- step1:在res/anim中创建动效.xml文件
- step2:设置平移动画的参数
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:startOffset="1000"
android:fillAfter="false"
android:fillBefore="true"
android:fillEnabled="true"
android:repeatCount="0"
android:repeatMode="restart"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="500"
android:toYDelta="500" />
- step3 在Java代码中创建animation对象&播放动画
Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
btn_start.startAnimation(animation);
方式二:Java代码中实现
TranslateAnimation translateAnimation = new TranslateAnimation(