在上一篇中,详细讲解了Android补间动画 - 缩放动画的具体实现,补间动画的其他动画实现方式很类似,能够将一个掌握透彻,其他也就迎刃而解,本篇文章主要讲解属性动画-平移动画的具体实现,同时也会概况属性动画的其他几种类型,相信看完本篇文章会对属性动画有一个全面的认识。
话不多说,我们仍然以一个实例来讲解,具体效果图如下:
对于属性动画的实现,我们可以不用在xml文件中实现具体动画效果,直接通过代码即可实现。
上图中,xml布局文件非常简单,一个button和一个view,这里就不再粘贴布局文件,仅仅提供java中的关键代码。
// 属性动画-平移
private void startPopsAnimTrans(){
if(objectAnimatorX == null){
float [] x= {0f,60f,120f,180f};
objectAnimatorX = ObjectAnimator.ofFloat(scaleAnimView,"translationX", x);
objectAnimatorX.setDuration(2000);
}
objectAnimatorX.start();
}
代码非常简单,仅仅几行即可实现,下面我们来分析ofFloat几个参数具体代表什么意思?
- 第一个参数
第一个参数,很明显,就是需要将动画作用于哪个对象上面即哪个View上面,直接传对应的View即可。
- 第二个参数
第二个参数为一个字符串,表示要实现的属性动画,可取值有:
alpha // 实现渐变效果
rotation // 实现旋转旋转效果
translationX // 实现水平移动效果(左或右移动)
translationY // 实现纵向移动效果(向上或者向下移动)
scaleX // 实现轴X缩放效果(放大或者缩小)
scaleY // 实现轴Y缩放效果(放大或者缩小)
- 第三个参数
第三个参数表示动画的具体效果,第三个参数是一个数组,数组的元素可以是1个、2个、3个或多个,下面我以当第二个参数为translationX进行具体说明:
当float [] x= {60f},view会在原有的基础上向右平移60px;
当float [] x= {0f, 60f},view 会从0点(即view在布局中最初的位置)开始向右平移60px;
当float [] x= {0f, 60f, 0f},view从0点开始向右平移60px,在回到0点位置;
当float [] x= {0f, 60f, 80f, 100f, ……}, view从0点开始向右平移60px再平移80px,再平移100px ……;
需要注意的是,对于平移可以是大于1或小于-1这样的数,如果当为alpha时,取值区间为0-1。
属性动画与补间动画有一个重要区别就是,补间动画对View的操作并不会改变View的实际位置,例如当对View添加点击事件,只有最开始的位置点击有效,但是属性动画,对View的位置做了实际的变化,点击的位置会随View的移动而移动。
很多情况下,我们想让一个按钮能够随着某一系列坐标点进行移动,这就涉及到多个属性动画的组合,例如下图效果:
具体代码如下:
private void startPopsAnimTrans(){
if(objectAnimatorX == null){
float [] x= {0f,60f,120f, 240f};
float [] y= {0f,30f,220f,90f};
objectAnimatorX = ObjectAnimator.ofFloat(scaleAnimView,"translationX", x);
objectAnimatorX.setDuration(2000);
objectAnimatorY = ObjectAnimator.ofFloat(scaleAnimView,"translationY", y);
objectAnimatorY.setDuration(2000);
}
objectAnimatorX.start();
objectAnimatorY.start();
}
这里对Android属性动画中的平移动画讲解到此,相信通过此篇文章,对平移动画的使用有全面的了解。