属性动画综合版

本文详细介绍了Android中视图动画的实现方式,包括属性动画ValueAnimator、ObjectAnimator及ViewPropertyAnimator的具体用法,并展示了如何使用AnimatorSet组合多种动画效果。
public class MainActivity extends AppCompatActivity {

    private ImageView icon;
    private LinearLayout container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        icon = (ImageView) findViewById(R.id.cion);
        container = (LinearLayout) findViewById(R.id.container);
    }

    public void onClick(View v) {

        //属性动画  ValueAnimator 的用法  ,属性动画本质是值动画
    ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);
    valueAnimator.setDuration(2000);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float animatedValue = (float) animation.getAnimatedValue();
            Log.e("TAG", "=========== animatedValue == " + animatedValue);
            ViewGroup.LayoutParams layoutParams = icon.getLayoutParams();
            layoutParams.width = (int) (animatedValue * 1000);
            layoutParams.height = (int) (animatedValue * 1000);
            icon.setLayoutParams(layoutParams);
            icon.setAlpha(animatedValue);
        }
    });
    valueAnimator.start();

        ObjectAnimator的用法

        透明度变化
    ObjectAnimator alphaObjectAnimator = ObjectAnimator.ofFloat(icon, "alpha", 0f, 1f, 0.5f);
    alphaObjectAnimator.setDuration(2000)
            .start();
       缩放
    ObjectAnimator scaleXObjectAnimator = ObjectAnimator.ofFloat(icon, "scaleX",0f,1f,0.5f);
    scaleXObjectAnimator.setDuration(2000)
            .start();
     平移
 ObjectAnimator translationXObjectAnimator = ObjectAnimator.ofFloat(icon, "translationX",0f,1000f);
    translationXObjectAnimator.setDuration(2000)
            .start();
     旋转
 ObjectAnimator rotationObjectAnimator = ObjectAnimator.ofFloat(icon, "rotation",0f,-360f);
    rotationObjectAnimator.setDuration(2000);
    rotationObjectAnimator.setRepeatCount(3);
    rotationObjectAnimator.setRepeatMode(ValueAnimator.REVERSE);
    rotationObjectAnimator.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) {
        }
    });
    rotationObjectAnimator.start();
        ViewPropertyAnimator的用法
    icon.animate().alpha(0.5f)
            .translationX(100f)
            .rotation(180)
            .scaleX(2)
            .scaleY(2)
            .setStartDelay(2000)
            .setDuration(3000);

        AnimatorSet 组合动画
    AnimatorSet animatorSet = new AnimatorSet();
    ObjectAnimator alphaObjectAnimator = ObjectAnimator.ofFloat(icon, "alpha", 0f, 1f, 0.5f);
    ObjectAnimator scaleXObjectAnimator = ObjectAnimator.ofFloat(icon, "scaleX", 0f, 1f, 0.5f);
    animatorSet.play(alphaObjectAnimator).with(scaleXObjectAnimator);
    animatorSet.playTogether(alphaObjectAnimator,scaleXObjectAnimator);
    animatorSet.playSequentially(alphaObjectAnimator, scaleXObjectAnimator);
    animatorSet.setDuration(3000);
    animatorSet.start();

      //ObjectAnimator也可以来实现组合动画
    PropertyValuesHolder alphaXPropertyValuesHolder = PropertyValuesHolder.ofFloat("alpha", 0f, 1f, 0.5f);
    PropertyValuesHolder scaleXPropertyValuesHolder = PropertyValuesHolder.ofFloat("scaleX", 1f, 2f);
    ObjectAnimator rotationObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(icon, alphaXPropertyValuesHolder, scaleXPropertyValuesHolder);
    rotationObjectAnimator.setDuration(2000);
    rotationObjectAnimator.start();

        valueAnimator实现组合动画
    ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);
    valueAnimator.setDuration(2000);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float animatedValue = (float) animation.getAnimatedValue();
            ViewGroup.LayoutParams layoutParams = icon.getLayoutParams();
            layoutParams.width = (int) (animatedValue * 300);
            layoutParams.height = (int) (animatedValue * 300);
            icon.setLayoutParams(layoutParams);
            icon.setAlpha(animatedValue);
        }
    });
    valueAnimator.start();
        AnimatorInflater去加载ValueAnimator对应的xml文件
    ValueAnimator valueAnimator = (ValueAnimator)AnimatorInflater.loadAnimator(this, R.animator.value_animator);
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float animatedValue = (float) animation.getAnimatedValue();
          icon.setAlpha(animatedValue);
        }
    });
    valueAnimator.setDuration(3000);
    valueAnimator.start();

        //AnimatorInflater去加载ObjectAnimator对应的xml文件
    ObjectAnimator objectAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.object_animator);
    objectAnimator.setDuration(3000);
    objectAnimator.setTarget(icon);
    objectAnimator.start();
      //AnimatorInflater去加载AnimatorSet对应的xml文件
    Animator animator = AnimatorInflater.loadAnimator(this, R.animator.animator_set);
    animator.setTarget(icon);
    animator.start();
        //利用ValueAnimator进行颜色变化动画
    ValueAnimator valueAnimator;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        valueAnimator = ValueAnimator.ofArgb(0xffff0000, 0xff0000ff, 0xff00ff00);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int colorValue = (int) animation.getAnimatedValue();
                container.setBackgroundColor(colorValue);
            }
        });
        valueAnimator.setDuration(2000);
        valueAnimator.start();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值