您的位置:首页 > 移动开发 > Android开发

Android属性动画分析

2015-10-29 17:24 309 查看
1、属性动画是3.0之后出来的,在属性动画中有两个属性框架,分别是ObjectAnimator或ValueAnimator,下面我们来详细的介绍它们的用法。

     ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需要通过它的静态工厂类直接返回一个ObjectAnimator对象。

ObjectAnimator animator = ObjectAnimator.ofFloat(view,"rotation",0f,360f);
animator.setDuration(2000);
animator.start();
       这是一个View的旋转动画,第一个参数是View对象,第二个参数是要操作的属性,后面是一个可变数组参数,我这传的是0f到360f是表示控件旋转360度,

填2000参数是表示做这个旋转动画执行2000毫秒。

2、我们来介绍ObjectAnimator操作的属性。

      translationX和translationY:这两个属性作为一种增量来控制这View对象从它布局容器的左上角坐标开始的位置。

      rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转。

      scaleX和scaleY:这两个属性控制着View对象围绕他的支点进行2D缩放。

      pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。

      X 和 Y:这是两个简单实用的属性,他描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX,translationY值得累计和。

     alpha:它表示View对象的alpha透明度。默认值是1(不透明),0代表完全透明(不可见)。

3、要同时使用动画时可以使用PropertyValuesHolder对象来控制translationX,scaleX,scaleY这三个属性。

PropertyValuesHolder  pvh1=PropertyValuesHolder.ofFloat(“translationX”,300f);
PropertyValuesHolder  pvh2=PropertyValuesHolder.ofFloat(“scaleX”,1f,0,1f);
PropertyValuesHolder  pvh3=PropertyValuesHolder.ofFloat(“scaleY”,1f,0,1f);
ObjectAnimator.ofPropertyValuesHolder(view,pvh1,pvh2,pvh3)
.setDuration(1000)
.start();
4、在来说说ValueAnimator在属性动画中占有非常重要的地位,虽然不想ObjectAnimator那样耀眼但它却是属性动画的核心所在,ObjectAnimator也是继承ValueAnimator。
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
animator.setTarget(view);
animator.setDuration(1000);
animator.start();

5、动画事件的监听。
ValueAnimator animator = ValueAnimator.ofFloat(0,100);

ae2a
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//监听动画开始
}

@Override
public void onAnimationEnd(Animator animation) {
//监听动画结束
}

@Override
public void onAnimationCancel(Animator animation) {
//监听动画取消
}

@Override
public void onAnimationRepeat(Animator animation) {
//监听动画是否重复
}
});
animator.start();
 当然如果使用不了这多的方法,也不需要重写这么的方法 ,Api也提供了这种处理。
ObjectAnimator animator = ObjectAnimator.ofFloat(this,"translationX",360f);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//监听动画值
}
});
6、AnimatorSet动画集合

       对于一属性同时作用多个属性动画效果,前面已经用PropertyValuesHolder实现了这样的效果。而AnimatorSet不仅能实现这样的效果,

同时也能实现更为精确的顺序控制。

ObjectAnimator animator1 = ObjectAnimator.ofFloat(this,"translationX",360f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(this,"scaleX",1f,0f,1f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(this,"scaleY",1f,0f,1f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(1000);
animatorSet.playTogether(animator1,animator2,animator3);
animatorSet.start();

7.interpolators(插值器)
       插值器是动画中一个非常重要的概念,通过插值器(Interpolators),可以定义动画变换速率,这一点非常类似物理中的加速度,其作用主要是控制目标变量的变化值进行对应的变换。

//自定义Interpolators动画过程
public class DecelerateAccelerateInterpolator implements TimeInterpolator {
@Override
public float getInterpolation(float input) {
float result;
if (input <= 0.5) {
result = (float) ((Math.sin(Math.PI*input))/2);
}else {
result = (float) ((2-Math.sin(Math.PI*input))/2);
}
return result;
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: