Android属性动画(一):ObjectAnimator

属性动画和视图动画不同之处在于, 属性动画后的view新位置是可以响应点击事件等, 属性动画移动的带有View的属性,而视图动画移动的只是视图而已, 交互事件依然在原位置才能响应。

1、ObjectAnimator:

创建一个ObjectAnimator需要通过静态工厂方法:传入的参数代表所要应用动画的view, 应用动画的哪个属性, 以及最后的可变参数代表相应属性的应用动画后的值(或范围);

ObjectAnimator animator = ObjectAnimator.ofFloat(view, "width", 300);

animator.setDuration(1000);

animator.start();

 

这里需要一个包装类来get、set这些属性的值:

class WrapperView{

private View mTarget;

public WrapperView(View view){

         mTarget = view;

}

public void setWidth(int width){

         mTarget.getLayoutParams.width = width;

         mTarget.requestLayout();

}

public int getWidth() {

        return mTarget.getLayoutParams.width;

}

}

改写:

WrapperView wrapper = new WrapperView(view);

ObjectAnimator.ofInt(wrapper, "width", 300).setDuration(1000).start();

 

注意:

ofInt(), ofFloat(), 代表最后一个可变参数的值的类型;

 

除了自定义的width,height属性,ObjectAnimator还有可以直接使用的属性:

1、translateX和translateY(增量);

2、rotate(2D)和rotateX,rotateY(3D)

3、 scaleX和scaleY (缩放)

4、pivotX和pivotY(缩放或旋转的转轴)

5、x和y(相对于左上方的坐标+translateX和translateY,代表最终坐标)

6、alpha(范围在0~1,0为完全透明)

 

另外,如果要使用多个属性的动画效果,类似于AnimationSet, 通过PropertyValuesHolder可以把多个属性的动画效果放在一起:

PropertyValuesHolder pvh1 = new PropertyValuesHolder("translateX", 100);

PropertyValuesHolder pvh2 = new PropertyVaulesHolder("alpha", 0.5f);

PropertyVaulesHolder pvh3 = new PropertyValuesHolder("y", 200);

ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(view, pvh1,pvh2, pvh3);

objectAnimator.setDuration(1000);

objectAnimator.start();

这样子就能做到多个属性一起动画啦

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值