安卓中基本的动画总结

2017-11-09  本文已影响58人  码农陈小二

安卓有三种基本的动画:

1.帧动画
2.补间动画
3.属性动画(安卓3.0以后加入)

帧动画

帧动画是在drawable下新建一个xml文件,然后标签为animation-list,标签下是一个个item,然后将这个drawable设置为需要动画的view的background,最后在代码中找到这个动画,然后运行就好。

        img.setImageResource(R.drawable.xx);
        AnimationDrawable animationDrawable = (AnimationDrawable) img.getDrawable();
        animationDrawable.start();
补间动画

补间动画就是所谓的移动、旋转、缩放之类的操作。补间动画并不会改变view的真正位置,例如将一个button从位置A移动到位置B,假如button有点击事件,这时点击位置B并不会有反应,只有点击位置A才有触发点击时间。

补间动画有两种实现方式:
1.在res-anim 里新建xml文件,其中的标签对应将要进行的动画如:

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="100"
    android:toYDelta="100"
    android:duration="2000" 
    >

</translate>

需要注意的是,我这里的duration属性,studio没有提示,需要自己手动输入。然后在代码中实现动画

        Animation animation = AnimationUtils.loadAnimation(this, R.anim.xx);
        view.startAnimation(animation);

2.当然,也可以不写xml文件,直接通过代码实现

        TranslateAnimation translateAnimation = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0f,
                Animation.ABSOLUTE, targetX,
                Animation.RELATIVE_TO_SELF, 0f,
                Animation.ABSOLUTE, targetY);
        translateAnimation.setDuration(2000);
        view.startAnimation(animation);
属性动画

属性动画有两个核心类ObjectAnimator以及ValueAnimator
其中ValueAnimator需要我们自己去实现元素的更新

        ValueAnimator animator = ValueAnimator.ofInt(0, 100);  
        animator.setTarget(view);  
        animator.setDuration(1000).start();  
        animator.addUpdateListener(new AnimatorUpdateListener(){  
            @Override  
            public void onAnimationUpdate(ValueAnimator animation){  
                 view.setTranslationY((Float) animation.getAnimatedValue());  
             }  
        });  

而ObjectAnimator就简单多了

        ObjectAnimator
         .ofInt(view, "translateY", 0, 100)//  
         .setDuration(1000)//  
         .start();

当然属性动画也可以在res-animator建立xml文件来实现动画。

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:valueFrom="0"
    android:valueTo="100"
    android:propertyName="translateY"
    android:duration="1000"
    >
</objectAnimator>

然后在代码中通过代码实现动画效果

        Animator animator = AnimatorInflater.loadAnimator(context, R.animator.xx); 
        animator.setTarget(view); //view表示我们要设置动画的对象
        animator.start();
以上就是动画的初步总结了,方便以后忘的时候可以查到。
上一篇下一篇

猜你喜欢

热点阅读