Android属性动画

1.第一页

package com.example.propertyanimdemo;

import android.animation.Animator;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.BounceInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    /**
     * 开始
     */
    private Button mBt;
    /**
     * Hello World!
     */
    private TextView mTv;
    /**
     * 停止动画
     */
    private Button mBtStop;
    private ValueAnimator valueAnimator;
    /**
     * 变色
     */
    private Button mBtColor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
        mTv = (TextView) findViewById(R.id.tv);
        mTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "我被点击了", Toast.LENGTH_SHORT).show();
            }
        });
        mBtStop = (Button) findViewById(R.id.btStop);
        mBtStop.setOnClickListener(this);
        mBtColor = (Button) findViewById(R.id.btColor);
        mBtColor.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt:
//                method1();
                method2();
                break;
            case R.id.btStop:
                if (valueAnimator != null) {
                    valueAnimator.cancel();//动画运行到什么地方,就停到什么地方
                    //valueAnimator.end();//停止动画时,组件停到终止的位置
                }
                break;
            case R.id.btColor:
                method3();
                break;
        }
    }

    /**
     * 颜色变换
     */
    private void method3() {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(0xffff0000, 0xff0000ff);
        //设置计算器
        valueAnimator.setEvaluator(new ArgbEvaluator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int value = (int) animation.getAnimatedValue();
                mTv.setBackgroundColor(value);
            }
        });
        valueAnimator.setDuration(3000);
        valueAnimator.start();
    }

    /**
     * 常用api
     */
    private void method2() {
        //创建ValueAnimator
        valueAnimator = ValueAnimator.ofInt(0, 400);
        //设置动画时间
        valueAnimator.setDuration(3000);
        //设置插值器
        valueAnimator.setInterpolator(new BounceInterpolator());
        //添加监听,给组件设置动画
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int animatedValue = (int) animation.getAnimatedValue();
//                Log.e("MainActivity", "animatedValue:" + animatedValue);
                mTv.layout(animatedValue, animatedValue, animatedValue + mTv.getWidth(), animatedValue + mTv
                        .getHeight());
            }
        });

        //监听动画状态
        valueAnimator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                Toast.makeText(MainActivity.this, "onAnimationStart", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                Toast.makeText(MainActivity.this, "onAnimationEnd", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                Toast.makeText(MainActivity.this, "onAnimationCancel", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                Toast.makeText(MainActivity.this, "onAnimationRepeat", Toast.LENGTH_SHORT).show();
            }
        });

        //设置循环次数
//        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
        //设置循环动画模式
        valueAnimator.setRepeatMode(ValueAnimator.REVERSE);

        //设置延迟时间
//        valueAnimator.setStartDelay(2000);
        //开始动画
        valueAnimator.start();


    }

    private void method1() {
        TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE,
                400, Animation.ABSOLUTE, 0, Animation
                .ABSOLUTE, 400);
        translateAnimation.setDuration(3000);
        //动画结束后,停止到最后的位置
        translateAnimation.setFillAfter(true);
        //开始动画
        mTv.startAnimation(translateAnimation);
    }
}

2.第二页

package com.example.propertyanimdemo;

import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.animation.Interpolator;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity implements View.OnClickListener {

    /**
     * 开始
     */
    private Button mBt;
    /**
     * Hello World!
     */
    private TextView mTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        initView();
    }

    private void initView() {
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
        mTv = (TextView) findViewById(R.id.tv);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt:
                method2();
                break;
        }
    }

    private void method2() {
        ValueAnimator valueAnimator = ValueAnimator.ofObject(new MyEvaluator(), new Character('A'), new Character('Z'));
        valueAnimator.setInterpolator(new MyInterpolator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Character c = (Character) animation.getAnimatedValue();
                mTv.setText(c.toString());
            }
        });
        valueAnimator.setDuration(5000);
        valueAnimator.start();
    }

    private void method1() {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 400);
        valueAnimator.setInterpolator(new MyInterpolator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int animatedValue = (int) animation.getAnimatedValue();
                mTv.layout(animatedValue, animatedValue, animatedValue + mTv.getWidth(), animatedValue + mTv
                        .getHeight());
            }
        });
        valueAnimator.setDuration(2000);
        valueAnimator.start();
    }

    class MyInterpolator implements Interpolator {
        @Override
        public float getInterpolation(float input) {
            Log.e("MyInterpolator", "input:" + input);
            return input;
        }
    }

    class MyEvaluator implements TypeEvaluator<Character> {
        @Override
        public Character evaluate(float fraction, Character startValue, Character endValue) {
            Log.e("MyInterpolator", "fraction:" + fraction + " startValue:" + (int) startValue + " endValue:" + (int)
                    endValue);
            //return 起始值+fraction*(结束值-起始值)
            int start = (int) startValue;
            int end = (int) endValue;
            int curInt = (int)(start + fraction *(end - start));
            char result = (char)curInt;
            return result;
        }
    }
}

3.第三页

package com.example.propertyanimdemo;

import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ThirdActivity extends AppCompatActivity implements View.OnClickListener {

    /**
     * 位移
     */
    private Button mBtTrans;
    /**
     * 旋转
     */
    private Button mBtRotate;
    /**
     * 渐变
     */
    private Button mBtAlpha;
    /**
     * 缩放
     */
    private Button mBtScale;
    /**
     * Hello World!
     */
    private TextView mTv;
    /**
     * 组合
     */
    private Button mBtZuhe;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        initView();
    }

    private void initView() {
        mBtTrans = (Button) findViewById(R.id.btTrans);
        mBtTrans.setOnClickListener(this);
        mBtRotate = (Button) findViewById(R.id.btRotate);
        mBtRotate.setOnClickListener(this);
        mBtAlpha = (Button) findViewById(R.id.btAlpha);
        mBtAlpha.setOnClickListener(this);
        mBtScale = (Button) findViewById(R.id.btScale);
        mBtScale.setOnClickListener(this);
        mTv = (TextView) findViewById(R.id.tv);
        mBtZuhe = (Button) findViewById(R.id.btZuhe);
        mBtZuhe.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btTrans:
                trans();
                break;
            case R.id.btRotate:
                rotate();
                break;
            case R.id.btAlpha:
                alpha();
                break;
            case R.id.btScale:
                scale();
                break;
            case R.id.btZuhe:
                zuhe();
                break;
        }
    }

    public void zuhe() {
        PropertyValuesHolder trans = PropertyValuesHolder.ofFloat(View.TRANSLATION_X, 0, 200f);
        PropertyValuesHolder rotate = PropertyValuesHolder.ofFloat(View.ROTATION_Y, 0, 180f);
        PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat(View.ALPHA, 0, 1f, 0.5f);
        PropertyValuesHolder scale = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1f, 2f);
        //给mTv添加了多种动画
        ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(mTv, trans, rotate, alpha, scale);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

    private void trans() {
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.TRANSLATION_X, 0, 200f);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

    private void rotate() {
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.ROTATION_Y, 0, 180f);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

    private void alpha() {
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.ALPHA, 0, 1f, 0.5f);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }

    private void scale() {
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mTv, View.SCALE_Y, 2f);
        objectAnimator.setDuration(3000);
        objectAnimator.start();
    }
}

4.第四页

package com.example.propertyanimdemo;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ForthActivity extends AppCompatActivity implements View.OnClickListener {

    private Button mBt;
    /**
     * tv1
     */
    private TextView mTv1;
    private TextView mTv2;
    /**
     * tv3
     */
    private TextView mTv3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_forth);
        initView();
    }

    private void initView() {
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
        mTv1 = (TextView) findViewById(R.id.tv1);
        mTv2 = (TextView) findViewById(R.id.tv2);
        mTv3 = (TextView) findViewById(R.id.tv3);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt:
                method2();
                break;
        }
    }


    private void method2() {
        ObjectAnimator tv1 = ObjectAnimator.ofFloat(mTv1, View.TRANSLATION_Y, 0f, 400f);
        ObjectAnimator tv2 = ObjectAnimator.ofFloat(mTv2, View.TRANSLATION_Y, 0f, 400f);
        ObjectAnimator tv3 = ObjectAnimator.ofFloat(mTv3, View.TRANSLATION_Y, 0f, 400f);
        //该对象用于添加联合动画
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.play(tv1)
                .before(tv3)
                .after(tv2);
        animatorSet.setDuration(2000);
        animatorSet.start();
    }

    /**
     * 两个组件动画一起执行
     */
    private void method1() {
        ObjectAnimator tv1 = ObjectAnimator.ofFloat(mTv1, View.TRANSLATION_Y, 0f, 400f);
        ObjectAnimator tv2 = ObjectAnimator.ofFloat(mTv2, View.TRANSLATION_Y, 0f, 400f);

        //该对象用于添加联合动画
        AnimatorSet animatorSet = new AnimatorSet();
        //animatorSet.playTogether(tv1, tv2);//两个组件一起执行动画
        animatorSet.playSequentially(tv1, tv2);//一个接一个执行动画
        animatorSet.setDuration(2000);
        animatorSet.start();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值