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

Android 动画机制 之 属性动画

2016-03-25 14:19 531 查看
Android 3.0 之后,Google提出了属性动画,有了更加丰富的动画效果了!

优点:动画效果丰富(基本能实现所有动画),并且可以进行交互

一.ObjectAnimation

先上个实现透明度动画的例子:

ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0.1f);
animator.setDuration(3000);
animator.start();


可以看到,它的对象就直接使用静态工厂类就可以返回,

view : 需要动画的view

“translationX” : 要操作的属性 (后面会列举一些常用的属性)

0.1f : 这里是一个可变数组参数

必须注意: 使用ObjectAnimation的时候,要操作的属性必须具有get,set方法,否则无效

常用的属性值:

translationX,translationY:作为增量,控制view开始于左上角

rotation , rotationX ,rotationY : 控制view围绕支点进行2D和3D的旋转

scaleX ,scaleY : 控制view围绕支点进行2D缩放

pivotX ,pivotY : 控制view的支点位置(默认为view的中心点)

x , y : 表示view的容器中的最终位置,是左上角和translationX,translationY的累积和

alpha : 表示view对象的透明度,1代表不透明,0代表完全透明

使用以上几个属性就可以实现视图动画中的所有效果了!

对于没有get和set方法的属性,我也想用怎么办呢?

解决办法:自定义一个属性类或者包装类来间接的增加get和set方法

例子:

public class WrapperView {

private View mTarget;

public WrapperView(View target){
this.mTarget = target;
}

public int getWidth(){
return mTarget.getLayoutParams().width;
}

public void setWidth(int width) {
mTarget.getLayoutParams().width = width;
mTarget.requestLayout();
}
}


使用也比较简单了

WrapperView wrapperView = new WrapperView(textView);
ObjectAnimator.ofInt(wrapperView,"width",500).setDuration(3000).start();


使用ObjectAnimation只能对一种属性进行动画效果,那么想要多个动画呢?

二:动画集合

方式一: PropetyValuesHolder

//位移动画
PropertyValuesHolder translationX = PropertyValuesHolder.ofFloat("translationX", 300f);
//缩放动画--X轴
PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f);
//缩放动画--Y轴
PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f);
//集合到一起,并开启动画
ObjectAnimator.ofPropertyValuesHolder(textView, translationX, scaleX, scaleY).setDuration(3000).start();


方式二:AnimationSet

ObjectAnimator translationX = ObjectAnimator.ofFloat(textView, "translationX", 300f);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(textView, "scaleX", 1f, 0, 1f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(textView, "scaleY", 1f, 0, 1f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(3000);
animatorSet.playSequentially(translationX,scaleX,scaleY);
animatorSet.start();


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