一 、Animations简介

  Animations提供了一系列的动画效果,这些效果可以应用于绝大多数的控件;

二、Animations的分类
  第一类:TweenedAnimations,该类Animations提供了旋转,移动,淡入淡出和缩放等效果;
  第二类:Frame-by-Frame Animations,这类Animations可以创建一个Drawable序列,这些Drawable可以按照指定的时间间歇一个个的显示;

TweenedAnimations介绍
(1)TweenedAnimations可以分为下面几类:

  1. Alpha:淡入淡出效果
  2. Scale:缩放效果
  3. Rotate:旋转效果
  4. Translate:移动效果

(2)Animations的使用方法:
  一种是在Java代码中使用,另一种是定义在XML文件中;

(3)在Java代码中使用步骤为:
  a) 创建一个AnimationSet对象;
  b)根据需要创建相应的Animation对象;
  c)根据软件动画的需求,为Animation对象设置相应的数据;
  d)将Animation对象添加到AnimationSet对象当中;
  e)使用控件对象开始执行AnimationSet;

而Animation在代码中对应的四个子类分别为:
  AlphaAnimation、TranslateAnimation、ScaleAnimation、RotateAnimation

例子:

代码如下:

activity_main.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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.xiaozhang.animationtest.MainActivity" >

    <Button
        android:id="@+id/scaleButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="scale动画效果" />

    <Button
        android:id="@+id/rotateButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/scaleButtonId"
        android:text="rotate动画效果" />

    <Button
        android:id="@+id/alphaButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/rotateButtonId"
        android:text="alpha动画效果" />

    <Button
        android:id="@+id/translateButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/alphaButtonId"
        android:text="translate动画效果" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageViewId"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="100dp"
            android:src="@drawable/icon" />
    </LinearLayout>

</RelativeLayout>

MainActivity.java

package com.xiaozhang.animationtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.imageViewId);
        imageView = (ImageView) findViewById(R.id.imageViewId);
        findViewById(R.id.rotateButtonId).setOnClickListener(
                new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        AnimationSet animationSet = new AnimationSet(true);
                        RotateAnimation rotateAnimation = new RotateAnimation(
                                0, 360, Animation.RELATIVE_TO_PARENT, 0.3f,
                                Animation.RELATIVE_TO_PARENT, 0.3f);
                        rotateAnimation.setDuration(1000);
                        animationSet.addAnimation(rotateAnimation);
                        imageView.startAnimation(animationSet);

                    }
                });
        findViewById(R.id.scaleButtonId).setOnClickListener(
                new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        AnimationSet animationSet = new AnimationSet(true);
                        ScaleAnimation scaleAnimation = new ScaleAnimation(1,
                                0.0f, 1, 0.0f, Animation.RELATIVE_TO_PARENT,
                                0.1f, Animation.RELATIVE_TO_PARENT, 0.1f);
                        scaleAnimation.setDuration(1000);
                        animationSet.addAnimation(scaleAnimation);
                        imageView.startAnimation(animationSet);

                    }
                });
        findViewById(R.id.alphaButtonId).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // 创建一个AnimationSet对象
                        AnimationSet animationSet = new AnimationSet(true);
                        // 创建一个AlphaAnimation对象
                        AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
                        // 设置整个动画执行所需要的时间
                        alphaAnimation.setDuration(2000);
                        // 将AlphaAnimation对象添加到AnimationSet当中
                        animationSet.addAnimation(alphaAnimation);
                        // 使用控件执行动画效果
                        imageView.startAnimation(alphaAnimation);

                    }
                });
        findViewById(R.id.translateButtonId).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        AnimationSet animationSet = new AnimationSet(true);
                        TranslateAnimation translateAnimation = new TranslateAnimation(
                                Animation.RELATIVE_TO_SELF, 0f,
                                Animation.RELATIVE_TO_SELF, 0.5f,
                                Animation.RELATIVE_TO_SELF, 0f,
                                Animation.RELATIVE_TO_SELF, 1.0f);
                        translateAnimation.setDuration(1000);
                        animationSet.addAnimation(translateAnimation);
                        imageView.startAnimation(translateAnimation);

                    }
                });
    }
}

另外,Animation或AnimationSet有一系列的方法,如:

  setDuration(long) :设置动画持续时间(单位:毫秒)

  setFillAfter(boolean) :如果参数为true,则动画执行结束后,控件将停留在结束的状态

  setFillBefore(boolean) :如果参数为true,则动画执行结束后,控件将回到执行前的状态

  setStartOffset(long) :设置动画执行前的等待时间

  setRepeatCount(int) :设置动画重复执行的次数

(4)使用XML文件来执行Animation;

  a)在res文件夹下新建一个名为anim的文件夹;

  b)为各个不同的效果分别创建xml文件,并首先加入set标签,标签代码如下:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

</set>

  c)在该标签中分别加入rotate,alpha,scale或translate标签;

  d)在代码当中使用AnimationUtils装载xml文件,并生成Animation对象;

例子如上,代码如下:

res/anim/alpha.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:startOffset="1000"
        android:toAlpha="0.0" />

</set>

res/anim/scale.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <scale
        android:duration="2000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.0"
        android:toYScale="0.0" />

</set>

res/anim/rotate.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <rotate
        android:duration="3000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+350" />

</set>

res/anim/translate.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <translate
        android:fromXDelta="50%"
        android:toXDelta="100%"
        android:fromYDelta="0%"
        android:toYDelta="100%"
        android:duration="2000"
        />

</set>

MainActivity.java

package com.xiaozhang.animationtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.imageViewId);
        imageView = (ImageView) findViewById(R.id.imageViewId);
        findViewById(R.id.rotateButtonId).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        Animation animation = AnimationUtils.loadAnimation(
                                MainActivity.this, R.anim.rotate);
                        imageView.startAnimation(animation);
                    }
                });
        findViewById(R.id.scaleButtonId).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        Animation animation = AnimationUtils.loadAnimation(
                                MainActivity.this, R.anim.alpha);
                        imageView.startAnimation(animation);

                    }
                });
        findViewById(R.id.alphaButtonId).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Animation animation = AnimationUtils.loadAnimation(
                                MainActivity.this, R.anim.scale);
                        imageView.startAnimation(animation);
                    }
                });
        findViewById(R.id.translateButtonId).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Animation animation = AnimationUtils.loadAnimation(
                                MainActivity.this, R.anim.translate);
                        imageView.startAnimation(animation);
                    }
                });
    }
}

不过需注意的是:

rotate.xml文件中android:pivotX的值共有三种设置方法:

  1.android:pivotX="50" 这种方法使用绝对位置定位;

  2.android:pivotX="50%" 这种方法相对于控件本身定位;

  3.android:pivotx="50%p" 这种方法相对于控件的父控件定位;

(5)AnimationSet介绍:

  AnimationSet是Animation的子类;一个AnimationSet包含了一系列的Animation;

  为AnimationSet设置一些常见属性后,这些属性会应用到AnimationSet中的每一个Animation中;

多种效果的例子:

代码如下:

res/anim/alpha_scale.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >

    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:startOffset="2000"
        android:toAlpha="0.0" />

    <rotate
        android:duration="2000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
    <rotate
        android:duration="2000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+350" />

    <translate
        android:duration="2000"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="100%" />

</set>

MainActivity.java

package com.xiaozhang.animationtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.imageViewId);
        imageView = (ImageView) findViewById(R.id.imageViewId);

        findViewById(R.id.buttonId).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Animation animation = AnimationUtils.loadAnimation(
                        MainActivity.this, R.anim.alpha_scale);
                imageView.startAnimation(animation);
            }
        });
    }
}

也可以使用AnimationSet来实现:

代码:

package com.xiaozhang.animationtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.imageViewId);
        imageView = (ImageView) findViewById(R.id.imageViewId);

        findViewById(R.id.buttonId).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                // Animation animation = AnimationUtils.loadAnimation(
                // MainActivity.this, R.anim.alpha_scale);
                // imageView.startAnimation(animation);

                AnimationSet animationSet = new AnimationSet(true);

                AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f);
                RotateAnimation rotate = new RotateAnimation(0, 360,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f);

                animationSet.addAnimation(alpha);
                animationSet.addAnimation(rotate);
                // 动画执行过程 用时2秒
                animationSet.setDuration(2000);
                // 延迟一秒后,再执行程序
                animationSet.setStartOffset(1000);
                imageView.startAnimation(animationSet);
            }
        });
    }
}

(6)Interpolator:定义了动画变化的速率,在Animations中有以下几种Interpolator;

  AccelerateDelerateInterpolator,在动画开始与结束的地方速率改变比较慢,在中间的时间加速;

  AccelerateInterpolator,在动画开始的地方速率比较慢,然后开始加速;

  CycleInterpolator,动画循环播放特定的次数,速率改变沿着正弦曲线;

  DecelerateInterpolator,在动画开始的地方速率改变比较慢,然后开始减速;

  LinearInterolator,动画以均匀的速率改变;

在代码中可以这样设置:

AnimationSet animationSet = new AnimationSet(true);
                animationSet
                        .setInterpolator(new AccelerateDecelerateInterpolator());

在XML文件中则是通过:

android:interpolator

(7)Frame-by-Frame Animations的使用方法

  a)在res/drawable当中创建一个XML文件,用于定义Animations的动画序列;

  b)为ImageView设置背景资源:imageView.setBackgroundResource(R.drawable.anim_pic);

  c)通过ImageView得到AnimationDrawable:

AnimationDrawable animation = (AnimationDrawable) imageView
.getBackground();

  d)开始执行动画:animationDrawable.start();

代码如下:

MainActivity.java

package com.xiaozhang.animationtest;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.imageViewId);
        imageView = (ImageView) findViewById(R.id.imageViewId);

        findViewById(R.id.buttonId).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                imageView.setBackgroundResource(R.drawable.anim_pic);
                AnimationDrawable animation = (AnimationDrawable) imageView
                        .getBackground();
                animation.start();
            }
        });
    }
}

anim_pic.xml

<?xml version="1.0" encoding="UTF-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/pic1"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic2"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic3"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic4"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic5"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic6"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic7"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic8"
        android:duration="800">
    </item>
    <item
        android:drawable="@drawable/pic9"
        android:duration="800">
    </item>

</animation-list>

activity_main.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"
    tools:context="com.xiaozhang.animationtest.MainActivity" >

    <Button
        android:id="@+id/buttonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="多张动画效果" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageViewId"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginTop="100dp" />
    </LinearLayout>

</RelativeLayout>

(8)LayoutAnimationController简介及使用:

  a)LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果;

  b)每一个控件都有相同的动画效果;

  c)这些控件的动画效果可以设置在不同的时间显示出来;

  d)LayoutAnimationController可以在xml文件当中设置,也可以在代码中进行设置;

先看在XML文件中配置的效果:

具体步骤如下:

  a)在res/anim文件夹中创建一个新文件,名为list_anim_layout.xml文件;

  b)在布局文件中为ListView添加如下配置,目的是将动画效果应用到ListView上;

android:layoutAnimation="@anim/list_anim_layout"

代码如下:

layout/activity_main.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"
    tools:context="com.xiaozhang.animationtest.MainActivity" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layoutAnimation="@anim/list_anim_layout"
        android:scrollbars="vertical" />

    <Button
        android:id="@+id/buttonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/android:list"
        android:text="test" />

</RelativeLayout>

anim/list_anim_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/list_anim"
    android:animationOrder="normal"
    android:delay="0.5" />

动画样式list_anim.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:shareInterpolator="true" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

ListView显示的内容:item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp" />

    <TextView
        android:id="@+id/user_sex"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp" />

</LinearLayout>

再来看在代码中使用LayoutAnimationController:

  a)创建一个Animation对象:可以通过装载XML文件,或者直接使用Animation的构造函数创建Animation对象;

  b)使用如下代码创建LayoutAnimationController对象:

LayoutAnimationController lac = new LayoutAnimationController(animation);

  c)设置控件显示的顺序:

lac.setOrder(LayoutAnimationController.ORDER_NORMAL);

  d)为ListView设置LayoutAnimationController属性:

listView.setLayoutAnimation(lac);

效果和上面类似,只是反过来:

看代码:

activity_main.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"
    tools:context="com.xiaozhang.animationtest.MainActivity" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />

    <Button
        android:id="@+id/buttonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/android:list"
        android:text="test" />

</RelativeLayout>

而MainActivity.java只需要修改onClick方法就行了;

public void onClick(View v) {
            listView.setAdapter(buildListAdapter());

            Animation animation = (Animation) AnimationUtils.loadAnimation(
                    MainActivity.this, R.anim.list_anim);
            LayoutAnimationController lac = new LayoutAnimationController(
                    animation);
            lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
            lac.setDelay(0.5f);
            listView.setLayoutAnimation(lac);
        }

(9)AnimationListener简单介绍

  a)AnimationListener是一个监听器,该监听器在动画执行的各个阶段会得到通知,从而调用相应的方法;

  b)主要有三个方法:

    onAnimationStart(Animation animation)

    onAnimationRepeat(Animation animation)

    onAnimationEnd(Animation animation)

下面看一个使用AnimationListener添加和移除控件的例子:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layoutId"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.xiaozhang.animationtest.MainActivity" >

    <Button
        android:id="@+id/addButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="添加动画" />

    <Button
        android:id="@+id/deleteButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/addButtonId"
        android:text="删除动画" />

    <ImageView
        android:id="@+id/imageViewId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:src="@drawable/icon" />

</RelativeLayout>

MainActivity.java

package com.xiaozhang.animationtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView imageView;
    private ViewGroup viewGroup = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.imageViewId);
        imageView = (ImageView) findViewById(R.id.imageViewId);
        viewGroup = (ViewGroup) findViewById(R.id.layoutId);

        findViewById(R.id.addButtonId).setOnClickListener(
                new AddButtonListener());
        findViewById(R.id.deleteButtonId).setOnClickListener(
                new RemoveButtonListener());
    }

    class AddButtonListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            //创建一个淡入效果的Animation对象
            AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
            animation.setDuration(2000);
            animation.setStartOffset(500);
            //创建一个新的ImageView
            ImageView imageViewAdd = new ImageView(MainActivity.this);
            imageViewAdd.setImageResource(R.drawable.icon);
            //将新的ImageView添加到iewGroup中
            viewGroup.addView(imageViewAdd, new LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            imageViewAdd.startAnimation(animation);
        }

    }

    class RemoveButtonListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            // 创建一个淡出效果的Animation对象
            AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);
            // 为Animation对象设置属性
            animation.setDuration(1000);
            animation.setStartOffset(500);
            // 为Animation对象设置监听器
            animation.setAnimationListener(new RemoveAnimationListener());
            imageView.startAnimation(animation);
        }

    }

    private class RemoveAnimationListener implements AnimationListener {

        @Override
        public void onAnimationStart(Animation animation) {
            System.out.println("start");

        }

        // 该方法在淡出效果执行结束之后被调用
        @Override
        public void onAnimationEnd(Animation animation) {
            System.out.println("end");
            // 从ViewGroup中删除掉ImageView控件
            viewGroup.removeView(imageView);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            System.out.println("repeat");
        }

    }
}

Android Animations简介的更多相关文章

  1. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  2. "浅谈Android"第一篇:Android系统简介

    近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...

  3. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  4. 被遗忘的Android mipmaps简介

    被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...

  5. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

  6. Android系统简介(上):历史渊源

    上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记<Just for Fun>, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...

  7. Android ART简介

    一.    Android ART简介 Android DEX/ODEX/OAT文件

  8. Android Animations 视图动画使用详解!!!

    转自:http://www.open-open.com/lib/view/open1335777066015.html Android Animations 视图动画使用详解 一.动画类型 Andro ...

  9. Android插件简介

    /** * @actor Steffen.D * @time 2015.02.06 * @blog http://www.cnblogs.com/steffen */ Android插件简介 Andr ...

随机推荐

  1. iOS 时区问题总结 NSTimeZone

    基本概念 GMT 0:00 格林威治标准时间; UTC +00:00 校准的全球时间; CCD +08:00 中国标准时间 [来自百度百科] 夏时制,英文"DaylightSavingTim ...

  2. [Redux] React Todo List Example (Toggling a Todo)

    /** * A reducer for a single todo * @param state * @param action * @returns {*} */ const todo = ( st ...

  3. AJAX的概念介绍

    AJAX学习 1.XMLHttpRequest对象创建 var request= new XMLHttpRequest(); 兼容ie6.ie5 var request; if(windoe.XMLH ...

  4. Mysql数据库里面的String类型依照数字来排序以及按时间排序的sql语句

    今天做项目的时候,遇到个小小的问题,在数据库中查询的时候,要用String类型的ID进行一下排序!(注:ID字段为 varchar 类型) 解决的方法: 如: SELECT * FROM  Stude ...

  5. Vss服务端用户存在,但客户端登陆不进去

    打开客户端Vss提示“Cannot find SS.INI file for user userName”,这个错误是找不到用户userName的SS.INI文件. 解决办法 在服务器上找到Vss共享 ...

  6. Java基础知识强化33:String类之String类的获取功能

    1. String类的获取功能 int length() // 获取字符串中字符的个数(长度) char charAt(int index)//根据位置获取字符 int indexOf(int ch) ...

  7. Linux下rar unrar的安装

    Linux下rar unrar的安装: 以3.8.0版本为例,如果是64位平台,执行以下命令,也可以去官方网站:)下载最新版: wget http://www.rarlab.com/rar/rarli ...

  8. Mysql查看连接端口及版本

    C:\Users\Administrator>mysql -uroot -pEnter password: *****Welcome to the MySQL monitor. Commands ...

  9. VMware Virtual Machine安装报错解决1

    安装完VMware virtual machine 后,再进行 "create a new virtual machine"最后点击"Finish"时,报如下错 ...

  10. linux命令之seq

    seq命令简述 seq命令比较常用,在需要做循环的时候用于产生一个序列是再合适不过的工具了,常用方法也比较简单: Usage:      seq [OPTION]... LAST      seq [ ...