现在的位置: 首页 > 综合 > 正文

Android使用XML做动画UI

2018年03月20日 ⁄ 综合 ⁄ 共 7720字 ⁄ 字号 评论关闭

http://www.cnblogs.com/andgoo/p/3182916.html

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

本教程中,介绍使用XML来做动画。在这里,介绍基本的动画,如淡入,淡出,旋转等。

效果: http://www.56.com/u82/v_OTM4MDk5MTk.html

第一步: 创建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"?>
    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"?>
    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"?>
    <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"?>
    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: 缩小

zoom_out.xml
<?xml version="1.0" encoding="utf-8"?>
    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"?>
    <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>

还有几个就不再列出,有兴趣下源码看。

http://pan.baidu.com/share/link?shareid=2682864564&uk=1863281063

抱歉!评论已关闭.