Android动画系列(一)

2017-04-21  本文已影响107人  往事一块六毛八

3.0以前,android支持两种动画模式,补间动画(tween animation),帧动画(frame animation),在android3.0中又引入了一个新的动画系统:属性动画(property animation)。 这三种动画模式在SDK中被称为view animation,drawable animation,property animation。

Tween animation(补间动画)

一、 分类

二、詳述

在xml形式下的代码结构

xml代码结构.png

(一) scale标签

自有属性
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%p"
    android:pivotY="50%p"
    android:duration="700"

    >

</scale>

MainActivity中的代码


     //第一:补间动画的类Animation ,加载xml布局的工具类AnimationUtils
                Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
                animation.setFillAfter(false);
                //调用View里设置animation的方法
                tv.startAnimation(animation);


scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);  
scaleAnim.setDuration(700);  
tv.startAnimation(scaleAnim); 
动态代码的构造函数.png

这里主要录制pivotX=50%p的情况下的gif图,主要看的是起点位置是在当前view的左上角,沿x轴跟y轴的方向上加上父布局宽度跟高度的50%

GIF.gif

改图是光放文档的截图:具体详情参考如下链接Tween Animation

scale标签.png

alpha——调节透明度

自有属性
alpha.png alpha.gif

alpha

<?xml version="1.0" encoding="utf-8"?>  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fromAlpha="1.0"  
    android:toAlpha="0.1"  
    android:duration="3000"  
    android:fillBefore="true">  
</alpha>

MainActivity中

        Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
                animation.setFillAfter(false);
//                //调用View里设置animation的方法
                tv.startAnimation(animation);

                AlphaAnimation alphaAnim = new AlphaAnimation(1.0f,0.1f);
                alphaAnim.setDuration(2000);
                tv.startAnimation(alphaAnim);

rotate——旋转

自有属性
rotate.png

rotate

<?xml version="1.0" encoding="utf-8"?>  
<rotate xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fromDegrees="0"  
    android:toDegrees="720"  
    android:pivotX="50%"  
    android:pivotY="50%"  
    android:duration="2000"  
>  
      
</rotate> 
   Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
                animation.setFillAfter(true);
//                //调用View里设置animation的方法
                tv.startAnimation(animation);
RotateAnimation rotateAnim = new RotateAnimation(0, -650, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                rotateAnim.setDuration(2000);
                rotateAnim.setFillAfter(true);
                tv.startAnimation(animation);

translate——位移

自有属性
translate.png

rotate

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

MainActivity 代码

   Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);
                animation.setFillAfter(true);
//                //调用View里设置animation的方法
                tv.startAnimation(animation);
TranslateAnimation translateAnim = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 80,   
        Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 80);  
translateAnim.setDuration(2000);  
translateAnim.setFillBefore(true);

set集合

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <!-- 按照需求分时间段 -->


    <!-- 第一段: 位移(右下) 1000ms -->
    <translate
        android:duration="1000"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="120%"
        android:toYDelta="100%" />

    <!-- 第二段:缩放(放大) +旋转(顺时针1周) 1500ms -->
    <!-- 通过startOffSet分割时间段:延时多少时间以后进行动画的播放 -->
    <scale
        android:duration="1500"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="170%"
        android:pivotY="150%"
        android:startOffset="1000"
        android:toXScale="1.5"
        android:toYScale="1.5" />
    <!-- 中心是原来的中心点,在原来的位置上加上位移的位置 -->
    <rotate
        android:duration="1500"
        android:fromDegrees="0"
        android:pivotX="170%"
        android:pivotY="150%"
        android:startOffset="1000"
        android:toDegrees="360" />

    <!-- 第三段:位移(向下) 1000ms -->
    <translate
        android:duration="1000"
        android:fromYDelta="0%"
        android:startOffset="2500"
        android:toYDelta="400%" />
    <!-- 第四段:缩放(缩小)+透明度(降低) 2000ms -->
    <alpha
        android:duration="2000"
        android:fromAlpha="1.0"
        android:startOffset="3500"
        android:toAlpha="0.0" />
    
    <!-- 注意中心点的位置 -->
    <scale
        android:duration="2000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="170%"
        android:pivotY="550%"
        android:startOffset="3500"
        android:toXScale="0.2"
        android:toYScale="0.2" />

</set>

MainActivity中的代码

   Animation animations2 = AnimationUtils.loadAnimation(this, R.anim.myset);
                animations2.setFillAfter(true);
//                //调用View里设置animation的方法
                tv.startAnimation(animations2);
             AlphaAnimation alphaAnim1 = new AlphaAnimation(1.0f,0.1f);
                alphaAnim1.setStartOffset(1000);
                ScaleAnimation scaleAnim1 = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
                RotateAnimation rotateAnim4 = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

                AnimationSet setAnim=new AnimationSet(true);
                setAnim.addAnimation(alphaAnim1);
                setAnim.addAnimation(scaleAnim1);
                setAnim.addAnimation(rotateAnim4);

                setAnim.setDuration(3000);
                setAnim.setFillAfter(true);
                tv.startAnimation(setAnim);;  

从Animation类继承的属性

Paste_Image.png Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读