Android属性动画的基本使用

来源:互联网 发布:小田切让演技知乎 编辑:程序博客网 时间:2024/05/23 12:45

         android系统中目前主要支持3种动画:帧动画、补间动画、属性动画。帧动画就是将多张图片集,按照一定的顺序快速播放,就形成了动画。补间动画主要包含:缩放、渐变、平移、旋转这四种动画。但缺点在于,只是改变了控件本身的形状、位置等外部属性,点击事件等属性,仍然没有改变。所以就有了属性动画,可以说是对补间动画的增强版,不仅修正了补间动画的缺陷,还支持更多的动画。

<span style="font-size:14px;"> textView1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                ObjectAnimator animator =ObjectAnimator.ofFloat(textView1,"alpha",0f,2f);                animator.setDuration(10000);                animator.start();                Toast.makeText(MainActivity.this,"渐变动画",Toast.LENGTH_SHORT).show();            }        });        textView2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                ObjectAnimator animator = ObjectAnimator.ofFloat(textView2,"rotation",0f,180f);                animator.setDuration(100);                animator.start();            }        });        textView3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                float currentX = textView3.getTranslationX();                ObjectAnimator animator = ObjectAnimator.ofFloat(textView3,"translationX",currentX,100f,50f);                animator.setDuration(500);                animator.start();            }        });        textView4.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                ObjectAnimator animator = ObjectAnimator.ofFloat(textView4,"scaleY",0.5f,2f);                animator.setDuration(1000);                animator.start();            }        });        textView5.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                ObjectAnimator animator = ObjectAnimator.ofFloat(textView5,"rotation",0f,360f);                ObjectAnimator object = ObjectAnimator.ofFloat(textView5,"scaleY",0f,1f);                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView5,"scaleX",0f,1f);                AnimatorSet animatorSet = new AnimatorSet();                /**                 * play(object) 插入这个动画                 * with(objectAnimator) 和插入的动画同时执行                 * before(animator) 理论上是在插入动画执行前执行,实际上和after一样都是在之后                 */                animatorSet.play(object).with(objectAnimator).before(animator);                animatorSet.setDuration(1000);                animatorSet.start();            }        });</span>
          如上所示,一般调用时:

         一、通过ObjectAnimator.ofFloat(textView3,"translationX",currentX,100f,50f)构建一个animation对象,其中第一个参数,动画应用的目标View,第二个参数,属性动画名称,第三个参数,开始动画的位置,第四个参数运动到的第二个位置,第三个参数,动画运动的最后一个位置。

   二、调用setDuration方法设置动画持续的时间,单位是毫秒。

   三、调用start方法,动画就开始执行了。

   而通常情况下,当一个动画执行结束之后,我们会希望执行指定的动作,所以就可以添加动画监听了:

 textView6.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                ObjectAnimator animator = ObjectAnimator.ofFloat(textView6,"rotation",0f,90f);               /*               通常情况下调用该方法,可以监听指定的动作               animator.addListener(new AnimatorListenerAdapter() {                    @Override                    public void onAnimationEnd(Animator animation) {                        super.onAnimationEnd(animation);                        Toast.makeText(MainActivity.this,"动画结束~",Toast.LENGTH_SHORT).show();                    }                });*/                animator.addListener(new Animator.AnimatorListener() {                    @Override                    public void onAnimationStart(Animator animator) {                        Toast.makeText(MainActivity.this,"动画开始~",Toast.LENGTH_SHORT).show();                    }                    @Override                    public void onAnimationEnd(Animator animator) {                        Toast.makeText(MainActivity.this,"动画结束~",Toast.LENGTH_SHORT).show();                    }                    @Override                    public void onAnimationCancel(Animator animator) {                        Toast.makeText(MainActivity.this,"动画取消执行~",Toast.LENGTH_SHORT).show();                    }                    @Override                    public void onAnimationRepeat(Animator animator) {                        Toast.makeText(MainActivity.this,"动画重复执行~",Toast.LENGTH_SHORT).show();                    }                });                animator.setDuration(1000);//动画持续时间                animator.setRepeatCount(2);//动画重复次数                animator.start();            }        });
    好了,以上就是属性动画的基本用法!

0 0
原创粉丝点击