属性动画animator

属性动画和传统动画的区别

传统动画只是具有显示的效果,不会正真改变位置、属性动画则相反

传统动画的写法
TranslateAnimation translateAnimation = new TranslateAnimation(0,200,0,0);
        translateAnimation.setFillAfter(true);
        translateAnimation.setDuration(1000);
        iv.startAnimation(translateAnimation);
属性动画的几种写法

1:

//3个动画是同时执行的
ObjectAnimator.ofFloat(iv,"rotation",0f,360f).setDuration(1000).start();
        ObjectAnimator.ofFloat(iv,"translationX",0f,150f).setDuration(1000).start();
        ObjectAnimator.ofFloat(iv,"translationY",0f,150f).setDuration(1000).start();

2:

 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation",0f,360f);
        PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationX",0f,150f);
        PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationY",0f,150f);
        ObjectAnimator.ofPropertyValuesHolder(iv,p1,p2,p3).setDuration(1000).start(); 

3:使用set指定动画顺序动画

 ObjectAnimator an1 = ObjectAnimator.ofFloat(iv, "rotation", 0f, 360f);
        ObjectAnimator an2 = ObjectAnimator.ofFloat(iv, "translationX", 0f, 150f);
        ObjectAnimator an3 = ObjectAnimator.ofFloat(iv, "translationY", 0f, 150f);

        AnimatorSet set = new AnimatorSet();
        // set.playTogether(an1,an2,an3);   //一起执行
        //set.playSequentially(an1,an2,an3);//分别执行

        set.play(an1).with(an2);
        set.play(an3).after(an2);

        set.setDuration(1000);
        set.start();

4:使用Valueanimator实现倒计时
ObjectAnimator是Valueanimator的子类

 ValueAnimator animator = ValueAnimator.ofInt(1,100);
        animator.setDuration(5000);
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                Integer value = (Integer) animation.getAnimatedValue();
                btu.setText(value+"");
            }
        });

        animator.start();

5:使用animator实现菜单弹出

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private int[] ids = {R.id.iv_a, R.id.iv_b, R.id.iv_c, R.id.iv_d};
    private List<ImageView> imageViewList = new ArrayList<>();
    private boolean flag = true;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for (int i = 0; i < ids.length; i++) {
            ImageView iv = (ImageView) findViewById(ids[i]);
            iv.setOnClickListener(this);
            imageViewList.add(iv);

        }
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.iv_a:
                if (flag)
                    startanimator();
                else
                    overanimator();
                break;
        }

    }

    private void overanimator() {
        for (int i = 1; i < ids.length; i++) {
            ObjectAnimator animator = ObjectAnimator.ofFloat(imageViewList.get(i), "translationY", i * 300f,0f);
            animator.setDuration(500);
            //延迟动画时间
            animator.setStartDelay(i * 300);
            //加载动画
            animator.setInterpolator(new BounceInterpolator());
            animator.start();
            flag = true;

        }
    }

    private void startanimator() {
        for (int i = 1; i < ids.length; i++) {
            ObjectAnimator animator = ObjectAnimator.ofFloat(imageViewList.get(i), "translationY", 0f, i * 300f);
            animator.setDuration(500);
            //延迟动画时间
            /* new AnticipateInterpolator() 先缓慢往指定方向的反方向移,再加速往指定方向移
            * new AnticipateOvershootInterpolator() 先缓慢往指定方向的反方向移,再加速往指定方向移,再缓慢往指                            定方向的反方向移      
            * new DecelerateInterpolator() 由快变慢
            * new FastOutLinearInInterpolator() 快速匀速运动
            * new FastOutSlowInInterpolator() 先慢后快再慢
            * new LinearInterpolator() 缓慢匀速移动
            * new LinearOutSlowInInterpolator() 先极快后慢
            * new OvershootInterpolator() 快速运动超出指定距离后缓慢返回
            */
            animator.setStartDelay(i * 300);
            //加载动画
            animator.setInterpolator(new BounceInterpolator());
            animator.start();
            flag=false;

        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容