Animation动画的xml使用

在Android应用程序,使用动画效果,能带给用户更好的感觉,做动画可以通过XML或Android代码来实现。

Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation (渐变动画),另一种是frame by frame animation (画面转换动画)。

tweened animation渐变动画有以下两种类型:

1.alpha     渐变透明度动画效果

2.scale    渐变尺寸伸缩动画效果

frame by frame animation 画面转换动画有以下两种类型:

1.translate   画面转换位置移动动画效果

2.rotate    画面转移旋转动画效果

在这里,我使用XML来做动画。实现基本的动画,如淡入,旋转等。

步骤:1、首先在res目录中新建anim的文件夹,在anim中新建需要的动画xml资源文件。

anim/alpha.xml(渐变动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        android:fromAlpha="0.1"
        android:toAlpha="1.0"
        android:duration="3000"/> 
<!-- 透明度控制动画效果 alpha
        浮点型值:
            fromAlpha 属性为动画起始时透明度  0.0表示完全透明
            toAlpha   属性为动画结束时透明度  1.0表示完全不透明
            以上值取0.0-1.0之间的float数据类型的数字
        
        长整型值:
            duration  属性为动画持续时间 以毫秒为单位
-->
</set>
anim/scale.xml(伸缩动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <scale  
          android:interpolator="@android:anim/accelerate_decelerate_interpolator"
          android:fromXScale="0.0"
          android:toXScale="1.4"
          android:fromYScale="0.0"
          android:toYScale="1.4"
          android:pivotX="50%"
          android:pivotY="50%"
          android:fillAfter="false"
          android:duration="700" />
</set>
<!-- 尺寸伸缩动画效果 scale
       属性:interpolator 指定一个动画的插入器
        在试验过程中,使用android.res.anim中的资源时候发现
        有三种动画插入器:
            accelerate_decelerate_interpolator  加速-减速 动画插入器
            accelerate_interpolator        加速-动画插入器
            decelerate_interpolator        减速- 动画插入器
        其他的属于特定的动画效果
      浮点型值:
            fromXScale 属性为动画起始时 X坐标上的伸缩尺寸
            toXScale   属性为动画结束时 X坐标上的伸缩尺寸
        
            fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
            toYScale   属性为动画结束时Y坐标上的伸缩尺寸
            说明:以上四种属性值    
                    0.0表示收缩到没有 
                    1.0表示正常无伸缩     
                    值小于1.0表示收缩  
                    值大于1.0表示放大
            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置
            说明:   以上两个属性值 从0%-100%中取值
                    50%为物件的X或Y方向坐标上的中点位置
        
        长整型值:
            duration  属性为动画持续时间   以毫秒为单位
        布尔型值:
            fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->
anim/translate.xml(移动动画)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
     <translate
        android:fromXDelta="30"
        android:toXDelta="-80"
        android:fromYDelta="30"
        android:toYDelta="300"
        android:duration="2000"/>
<!-- translate 位置转移动画效果
        整型值:
            fromXDelta 属性为动画起始时 X坐标上的位置    
            toXDelta   属性为动画结束时 X坐标上的位置
            fromYDelta 属性为动画起始时 Y坐标上的位置
            toYDelta   属性为动画结束时 Y坐标上的位置
            注意:
                     没有指定fromXType toXType fromYType toYType 时候,
                     默认是以自己为相对参照物             
        长整型值:
            duration  属性为动画持续时间   以毫秒为单位
-->
</set>
anim/rotate.xml(旋转动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate 
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0" 
        android:toDegrees="+350"         
        android:pivotX="50%" 
        android:pivotY="50%"     
        android:duration="3000" />  
<!-- rotate 旋转动画效果
       属性:interpolator 指定一个动画的插入器
             在试验过程中,使用android.res.anim中的资源时候发现
             有三种动画插入器:
                accelerate_decelerate_interpolator   加速-减速 动画插入器
                accelerate_interpolator               加速-动画插入器
                decelerate_interpolator               减速- 动画插入器
             其他的属于特定的动画效果
                           
       浮点数型值:
            fromDegrees 属性为动画起始时物件的角度    
            toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   
        
            说明:    当角度为负数——表示逆时针旋转
                     当角度为正数——表示顺时针旋转              
                     (负数from——to正数:顺时针旋转)   
                     (负数from——to负数:逆时针旋转) 
                     (正数from——to正数:顺时针旋转) 
                     (正数from——to负数:逆时针旋转)       
            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置
                
            说明:  以上两个属性值 从0%-100%中取值
                   50%为物件的X或Y方向坐标上的中点位置
        长整型值:
            duration  属性为动画持续时间   以毫秒为单位
-->
</set>
2、xml资源文件创建完成之后,接下来就是调用这些资源文件。以alpha为例,先创建AlphaActivity。

在activity_alpha.xml中随便放一张背景图片

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/test_bg"
    tools:context=".AlphaActivity" >
 
</RelativeLayout>
AlphaActivity.java
package com.example.animation_demo;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
 
public class AlphaActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View view=View.inflate(this, R.layout.activity_alpha, null);
        setContentView(view);
        //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
        Animation animation=AnimationUtils.loadAnimation(this, R.anim.alpha);
        view.startAnimation(animation);
        animation.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation arg0) {}   //在动画开始时使用
             
            @Override
            public void onAnimationRepeat(Animation arg0) {}  //在动画重复时使用
 
            @Override
            public void onAnimationEnd(Animation arg0) {
                Toast.makeText(AlphaActivity.this, "在动画结束时使用", Toast.LENGTH_SHORT).show();
            }
        });
    }
}
这个是整个layout文件的动画,也可以让任何UI元素调用starAnimation方法。

例如:textMsg.startAnimation(animation); 这时候就不需要下面代码 动画填充指定xml了

View view=View.inflate(this, R.layout.activity_alpha, null);
setContentView(view);
直接setContentView(R.layout.activity_alpha); 就OK了。卒。
效果图:

附上找到的一些基本的xml效果:

Fade In:淡入
alpha是渐变透明度效果,值由0到1

fade_in.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
   
    <alpha  
        android:duration="1000"  
        android:fromAlpha="0.0"  
        android:interpolator="@android:anim/accelerate_interpolator"  
        android:toAlpha="1.0" />  
</set> 
Fade Out :淡出
以Fade In刚好相反,值由1到0
fade_out.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
   
    <alpha  
        android:duration="1000"  
        android:fromAlpha="1.0"  
        android:interpolator="@android:anim/accelerate_interpolator"  
        android:toAlpha="0.0" />  
</set>  
Cross Fading:  交叉的淡入和淡出
同时使用Fade in和Fade out可以达到交叉的效果
public class CrossfadeActivity extends Activity implements AnimationListener {  
  
    TextView txtMessage1, txtMessage2;  
    Button btnStart;  
 
    Animation animFadeIn, animFadeOut;  
 
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_crossfade);  
 
        txtMessage1 = (TextView) findViewById(R.id.txtMessage1);  
        txtMessage2 = (TextView) findViewById(R.id.txtMessage2);  
        btnStart = (Button) findViewById(R.id.btnStart);  
 
        // load animations  
        animFadeIn = AnimationUtils.loadAnimation(getApplicationContext(),  
                R.anim.fade_in);  
        animFadeOut = AnimationUtils.loadAnimation(getApplicationContext(),  
                R.anim.fade_out);  
 
        // set animation listeners  
        animFadeIn.setAnimationListener(this);  
        animFadeOut.setAnimationListener(this);  
  
        // button click event  
        btnStart.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                txtMessage2.setVisibility(View.VISIBLE);  
                txtMessage2.startAnimation(animFadeIn);  
                txtMessage1.startAnimation(animFadeOut);  
            }
        });
    }
  
    @Override  
    public void onAnimationEnd(Animation animation) {  
          
        if (animation == animFadeOut) {  
            txtMessage1.setVisibility(View.GONE);  
        }  
          
        if(animation == animFadeIn){  
            txtMessage2.setVisibility(View.VISIBLE);  
        }  
    }  
  
    @Override  
    public void onAnimationRepeat(Animation animation) {  
        // TODO Auto-generated method stub  
    }  
  
    @Override  
    public void onAnimationStart(Animation animation) {  
        // TODO Auto-generated method stub  
    }  
}
BLink:若隐若现

blink.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <alpha android:fromAlpha="0.0"  
        android:toAlpha="1.0"  
        android:interpolator="@android:anim/accelerate_interpolator"  
        android:duration="600"  
        android:repeatMode="reverse"  
        android:repeatCount="infinite"/>  
</set>  
Zoom In:放大
zoom_in.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
    <scale  
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:duration="1000"  
        android:fromXScale="1"  
        android:fromYScale="1"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:toXScale="3"  
        android:toYScale="3" >  
    </scale>  
</set>  
Zoom Out:缩小
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
    <scale  
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:duration="1000"  
        android:fromXScale="1.0"  
        android:fromYScale="1.0"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:toXScale="0.5"  
        android:toYScale="0.5" >  
    </scale>  
</set>  
Rotate:旋转
rotate.xml
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <rotate android:fromDegrees="0"  
        android:toDegrees="360"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:duration="600"  
        android:repeatMode="restart"  
        android:repeatCount="infinite"  
        android:interpolator="@android:anim/cycle_interpolator"/>  
</set>
好长啊。。。既然你们都看到这里了,再多说几句。。
根节点<set>的属性:

 

 

————————————————
版权声明:本文为CSDN博主「dgdisme」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ycwol/article/details/41118831

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值