今天涉及的内容有:
1. Animation 的基本动画属性
2. Animation基本动画属性的效果图
3. MainActivity中代码调用
4. MainActivity对应布局代码
5. 项目结构图
####一. Animation 的基本动画属性
Animation 作为所有动画的基类,具有以下属性:
- android:duration 一次动画的执行时间,单位毫秒
- android:fillAfter 若设置为true,则控件动画结束时,保持动画结束时状态
- android:fillBefore 若设置为 true,则控件动画结束时,还原到初始化状态
- android:fillEnabled 与 android:fillBefore 效果相同,都是在控件动画结束时,还原到初始化状态
- android:repeatCount 动画执行次数,当取值为 infinite 时,表示无限循环。
- android:repeatMode 设置动画重复类型,有 reverse 和 restart 两个值。其中 reverse 表示倒放,restart 表示重放,并且必须和 -repeatCount 一起使用才能看到效果
- android:interpolator 用于设置插值器
####二.Animation基本动画属性的效果图
#####2.1 android:fillAfter 保持动画结束时的状态
![1.gif](/contentImages/image/jianshu/6127340-d6d142e782aa4347.gif)
需要注意的是,这时的动画直接定格在了结尾,即控件本身的1.4倍大小处。
#####2.2 android:fillBefore 还原到初始化状态
效果图如下:
![2.gif](/contentImages/image/jianshu/6127340-7b6faa83f319a763.gif)
这里需要注意的是,还原到初始化状态,指的是控件的原本大小,而不是指动画执行开始的显示状态,即可理解为,动画执行完毕后,恢复到控件原本大小(针对本缩放动画而言)
fillBefore 属性默认为true
#####2.3 android:repeatCount 动画执行次数
以运行3次为例,效果图如下:
![3.gif](/contentImages/image/jianshu/6127340-07f3c00b13dd40b8.gif)
#####2.4 android:repeatCount="infinite" 动画无限循环
运行效果如下:
![4.gif](/contentImages/image/jianshu/6127340-3c4d96944c0b7e2a.gif)
#####2.5 android:repeatMode="restart/reverse" 设定重复类型
效果图如下:
![5.gif](/contentImages/image/jianshu/6127340-8fd3e361b0656fe6.gif)
repeatMode取值为 reverse 时,运行效果图如下:
![6.gif](/contentImages/image/jianshu/6127340-d0f34613b8860e2c.gif)
很显然, repeatMode 中restart表示重放,reverse表示倒序回放。
#####三。MainActivity中代码调用
下面贴出动画文件在MainActivity中执行的代码:
```
public class MainActivity extends BaseActivity {
private TextView mTv;
private Button mBtn;
@Override
public int getContentViewId() {
return R.layout.activity_main;
}
@Override
public void initData() {
mTv=findViewById(R.id.textView);
mBtn=findViewById(R.id.button);
}
@Override
public void setListener() {
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//startScaleAnimation(mTv);
保持动画结束时的状态
//scaleFillAfter(mTv);
还原到动画初始化状态
//scaleFillBefore(mTv);
动画执行3次
//scaleRepeatCount1(mTv);
动画执行无限循环
//scaleRepeatCount2(mTv);
动画执行类型:重放
//scaleRepeatRestart(mTv);
//动画执行类型:倒放
scaleRepeatReverse(mTv);
}
});
}
/**开始动画**/
private void startScaleAnimation(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_anim);
view.startAnimation(animation);
}
/**保持动画结束时的状态**/
private void scaleFillAfter(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_fill_after);
view.startAnimation(animation);
}
/**还原到动画初始化状态**/
private void scaleFillBefore(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_fill_before);
view.startAnimation(animation);
}
/**动画执行3次**/
private void scaleRepeatCount1(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_repeat_count_1);
view.startAnimation(animation);
}
/**动画执行无限循环**/
private void scaleRepeatCount2(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_repeat_count_2);
view.startAnimation(animation);
}
/**动画执行类型:重放**/
private void scaleRepeatRestart(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_repeat_restart);
view.startAnimation(animation);
}
/**动画执行类型:倒放**/
private void scaleRepeatReverse(View view){
Animation animation= AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_repeat_reverse);
view.startAnimation(animation);
}
}
```
####四.MainActivity对应布局代码
下面贴出MainActivity对应的布局 activity_main.xml代码:
```
```
####五.项目结构图
![7.png](/contentImages/image/jianshu/6127340-f9347d97c3209eff.png)
ok,关于Animation的基本属性就讲到这里了,谢谢大家,具体的大家可以下载demo学习。