广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android 使用XML做动画UI的深入解析

    2018-04-09 07:41:19 次阅读 稿源:互联网
    广告

    效果: 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"?>
    <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: 缩小
    zoom_out.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.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>

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告