打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 使用XML做动画UI的深入解析
在Android应用程序,使用动画效果,能带给用户更好的感觉。做动画可以通过XML或Android代码。本教程中,介绍使用XML来做动画。在这里,介绍基本的动画,如淡入,淡出,旋转等,需要的朋友可以参考下  

  效果: 
第一步: 创建anim文件夹放置动画xml文件
在res文件夹下,创建一个anim的子文件夹。

  



第二步: 加载动画
接着在Activity创建一个Animation类,然后使用AnimationUtils类加载动画xml

复制代码 代码如下: 
Animation animFadein; 

@Override
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_fadein); 

txtMessage = (TextView) findViewById(R.id.txtMessage); 
btnStart = (Button) findViewById(R.id.btnStart); 

// 加载动画 
animFadein = AnimationUtils.loadAnimation(getApplicationContext(), 
R.anim.fade_in); 

  
第三步: 设置动画监听器
如果你要监听动画的事件,如开始,结束等,你需要实现AnimationListener监听器,重写以下方法。
onAnimationEnd(Animation animation) - 当动画结束时调用
onAnimationRepeat(Animation animation) - 当动画重复时调用
onAniamtionStart(Animation animation) - 当动画启动时调用

复制代码 代码如下: 
@Override
public void onAnimationEnd(Animation animation) { 
// 在动画结束后使用 

// check for fade in animation 
if (animation == animFadein) { 
Toast.makeText(getApplicationContext(), "Animation Stopped", 
Toast.LENGTH_SHORT).show(); 




@Override
public void onAnimationRepeat(Animation animation) { 
//当动画重复时使用 



@Override
public void onAnimationStart(Animation animation) { 
//当动画开始使用 

}

  
最后一步: 让动画动起来啦。可以使用任何UI元素调用startAnimation方法。
以下是一个Textview元素调用的。
txtMessage.startAnimation(animFadein);
完整代码: 

复制代码 代码如下: 
FadeInActivity(淡入动画) 
?package com.chaowen.androidanimations; 

import info.androidhive.androidanimations.R; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.view.animation.Animation.AnimationListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

/** 
 *  
 * @author chaowen 
 * 
 */
public class FadeInActivity extends Activity implements AnimationListener { 

    TextView txtMessage; 
    Button btnStart; 

    Animation animFadein; 

    @Override
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_fadein); 

        txtMessage = (TextView) findViewById(R.id.txtMessage); 
        btnStart = (Button) findViewById(R.id.btnStart); 

        // 加载动画 
        animFadein = AnimationUtils.loadAnimation(getApplicationContext(), 
                R.anim.fade_in); 

        // 设置监听 
        animFadein.setAnimationListener(this); 

        // 按钮 
        btnStart.setOnClickListener(new View.OnClickListener() { 

            @Override
            public void onClick(View v) { 
                txtMessage.setVisibility(View.VISIBLE); 

                // 开始动画 
                txtMessage.startAnimation(animFadein); 
            } 
        }); 

    } 

    @Override
    public void onAnimationEnd(Animation animation) { 
        // 在动画结束后使用 

        // check for fade in animation 
        if (animation == animFadein) { 
            Toast.makeText(getApplicationContext(), "Animation Stopped", 
                    Toast.LENGTH_SHORT).show(); 
        } 

    } 

    @Override
    public void onAnimationRepeat(Animation animation) { 
        //当动画重复时使用 

    } 

    @Override
    public void onAnimationStart(Animation animation) { 
        //当动画开始使用 

    } 

}

  
一些重要的XML属性
重要的XML动画属性
android:duration 动画持续时间,时间以毫秒为单位
android:startOffset 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
android:interpolator 指定一个动画的插入器
android:fillAfter 当设置为true ,该动画转化在动画结束后被应用
android:repeatMode 定义重复的行为
android:repeatCount 动画的重复次数
 
以下是一些基本的动画XML.
Fade In:  淡入
alpha是渐变透明度效果,值由0到1
fade_in.xml  

复制代码 代码如下: 
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns: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="
    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="
    <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="
    android:fillAfter="true" > 

    <scale 
        xmlns: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: 缩小
zoom_out.xml 

复制代码 代码如下: 
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="
    android:fillAfter="true" > 

    <scale 
        xmlns: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="
    <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>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android 手势滑动动画效果收集整理
Android 动画之补间动画
Android中的Drawable资源详解
Android 动画使用心得 - 软酷快讯
Android开发之资源文件存储
Android属性动画完全解析(上),初识属性动画的基本用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服