首先,我们要区别属性动画与补间动画的区别:
- 属性动画:真正改变了控件的属性
- 补间动画:视觉现象,没有改变都控件真正的值(如:当控件发送位置变化时,如果设置了点击事件,只有控件原位置的地方才有点击事件!)
- ValueAnimator
- ObjectAnimator.ofFloat()
以一个textView为例来演示属性动画!
1、animate()方法的基本使用 animate()方法是view自带的,实现属性动画的方法,但是该方法只能 实现简单的动画效果 !
以textView为例,textView也是一个view,所以可以直接使用该方法!
TextView tvTest=findViewById(R.id.tv_test);
//translationYBy():沿Y轴移动多少距离,其他方法同理
//setDuration():设置持续时间,单位是ms
//start():启动动画
tvTest.animate().translationYBy(500).setDuration(2000).start();
//alpha():透明度变化
tvTest.animate().alpha(0).setDuration(5000).start();
效果:
文章图片
2、ValueAnimator 该类适用于监听值的变化,如从0->100发生的数值的变化可以用到该方法
//设置valueAnimator的数值从0变为100
ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,100);
//设置时间
valueAnimator.setDuration(1000);
//设置监听事件
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//对值的变化进行监听(0-100[上述的值设的是0-100])
Log.d(TAG,""+animation.getAnimatedValue());
//返回当前动画分数,即在动画中使用的经过/内插分数
//动画的最新帧更新(0-1)
Toast.makeText(EasyDemoActivity.this,""+animation.getAnimatedFraction(),Toast.LENGTH_SHORT).show();
}
});
//开始动画
valueAnimator.start();
效果:
文章图片
3、ObjectAnimator.ofFloat() 可以设置持续改变的动画
TextView tvTest=findViewById(R.id.tv_test);
//将textview作为参数穿进去
//"translationY":表示动画要执行的类型
//0,500,300:表示移动的过程,可多个值
ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(tvTest,"translationY",0,500,300);
//设置动画事件
objectAnimator.setDuration(3000);
//开始动画
objectAnimator.start();
【Android学习|【Android-动画】属性动画基本介绍及使用方式】效果:
文章图片