Android属性动画ObjectAnimator和ValueAnimator的简单应用
ObjectAnimator
Android动画分为四种:alpha(渐变透明度),scale(渐变尺寸伸缩),translate(画面转换位置移动),rotate(画面转移旋转)
ofFloat
第一个参数为要控制的控件,第二个参数为动画的类型,第三个之后的参数为动画所需要的值
可以设置多个值让他反复变化
可以通过方法ofFloat (Object target,String xPropertyName,String yPropertyName, Path path)同时改变两个属性
//向右平移的同时进行放大
Path path=new Path();
path.moveTo(0,1);
path.lineTo(3,300);
ObjectAnimator.ofFloat(imageView,"translationX","scaleY",path)
.setDuration(1000)
.start();
透明度
ofFloat方法的第二个参数传入alpha,表示透明度,1,0.5f表示由不透明到半透明
//透明度动画值:开始透明度,结束透明度...
//可以设置多个值让他反复变化
ObjectAnimator.ofFloat(mView.ivShow, "alpha", 1, 0)
.setDuration(5000)
.start();
ObjectAnimator.ofFloat(mView.ivShow, "alpha", 1, 0, 1)
.setDuration(5000)
.start();
平移
ofFloat方法的第二个参数传入translationX,表示沿X轴平移,0,200表示在X轴方向上从0的位置移动到200
//平移动画值:开始位置,结束位置...
//可以设置多个值让他反复变化
ObjectAnimator.ofFloat(mView.ivShow, "translationX", 0, 800)
.setDuration(5000)
.start();
ObjectAnimator.ofFloat(mView.ivShow, "translationX", 0, 800, 50)
.setDuration(5000)
.start();
旋转
ofFloat方法的第二个参数传入rotationX和rotationY,表示沿X轴、Y轴旋转,0,360表示旋转一周
//以X轴为轴旋转一圈
ObjectAnimator.ofFloat(mView.ivShow,"rotationX",0,360)
.setDuration(5000)
.start();
//以Y轴为轴旋转一圈
ObjectAnimator.ofFloat(mView.ivShow,"rotationY",0,360)
.setDuration(5000)
.start();
ValueAnimator
属性动画,是继逐帧动画和补间动画之后Android引入的更方便自定义的动画类
ValueAnimator 是 ObjectAnimator 的父类,他两之间的区别是,ObjectAnimator 在ValueAnimator 的基础上,通过反射技术实现了动画功能,也就像我刚刚所举的例子,子要给了 ObjectAnimator 两个值(from,to),在确定动画类型(“scale,ranslate”),他就能自动生成动画。
与之形成区别,虽然我们同样需要给 ValueAnimator 传递起始和最终两个值,但是 ValueAnimator 并不会自动去执行什么,而是会通过 addUpdateListener 的监听方法,在时间插值器的作用下,有序的返回一连串数值,然后我们就可以通过这些数值,对控件进行设置。
常用方法
anim.setDuration(500); //设置动画运行的时长
anim.setStartDelay(500); //设置动画延迟播放时间
实例
页面跳转
//动画跳转
ValueAnimator welAnimator = ValueAnimator.ofFloat(1f, 0f).setDuration(800);
welAnimator.setStartDelay(1000); //延时启动
welAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
startActivity(new Intent(MainActivity.this, BookReadActivity.class));
MainActivity.this.finish(); //关闭当前页面,这样欢迎页面就不会出现在返回栈中。
}
@Override
public void onAnimationEnd(Animator animator) { }
@Override
public void onAnimationCancel(Animator animator) { }
@Override
public void onAnimationRepeat(Animator animator) { }
});
welAnimator.start();
变更透明度
welAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float alpha = (Float) valueAnimator.getAnimatedValue();
mView.welcomeLove.setAlpha(alpha);
mView.welcomeQy.setAlpha(alpha);
}
});
推荐阅读
-
Android 属性动画(Property Animation) ObjectAnimator的介绍
-
Android属性动画ObjectAnimator的使用1
-
Android 属性动画和自定义View的使用
-
CSS3中的变形和过渡与动画和关联属性的简单介绍
-
Android属性动画ObjectAnimator和ValueAnimator的简单应用
-
安卓最简单的动画效果实现-使用属性android:animateLayoutChanges="true"
-
android动画三(ValueAnimator和ObjectAnimator的高级用法).md
-
Android属性动画ObjectAnimator的使用1
-
CSS3中的变形和过渡与动画和关联属性的简单介绍
-
Android 属性动画(Property Animation) ObjectAnimator的介绍