android Animation监听器AnimationListener的使用方法)

AnimationListener听名字就知道是对Animation设置监听器,说简单点就是在Animation动画效果开始执行前,执行完毕和重复执行时可以触发监听器,从而执行对应的函数。

开发环境为android4.1.
AnimaitonListener的使用方法主要是在Animation上设置一个监听器,即采用Animation的方法成员setAnimationListener().其参数就是监听器的函数。
现在来说说本次实验的功能,主要有2个按钮,一个是增加图片的按钮,一个是删除图片的按钮,还有一个ImageView的控件,用来显示图片的。当增加图片的按钮按下时,图片会以无到全尺寸的尺寸大小变化出现,而删除按钮按下时,图片会从全尺寸到0尺寸逐渐退出,最后删除掉。

程序界面如下:

这里值得一提的是ViewGroup这个控件,感觉就是Layout控件一样,本次实验的图片控件ImageView里面的图片的增加和删除就是采用的ViewGrop中的addView()和removeView()方法。这2种方法里面传入的参数就是ImageView.
另外,Mars老师资料中在增加图片监听器函数中,重新定义了一个ImageView,重新把这个ImageView加入到ViewGroup中,这样会导致一个问题,那就是当我们把图片删除后且又重新加载后就删除不掉了,因为我们在删除的时候删的是布局文件中的ImageView,但是增加按钮增加的是另外一个ImageView,所以我们虽然删除掉了布局文件中的ImageView,但是屏幕上还是会显示图片的。因此解决的方法就是在增加按钮函数中直接使用布局文件中的ImageView,这样程序中可以一直增加图片和删除图片,且在屏幕中还能看到效果。

程序主要代码如下:
MainActivity.java:


代码如下:

package com.example.anim_5;

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

public class MainActivity extends Activity {

private Button add = null;
    private Button delete = null;
    private ViewGroup viewgroup =  null;
    private ImageView imageview = null;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

add = (Button)findViewById(R.id.add);
        delete = (Button)findViewById(R.id.delete);
        imageview = (ImageView)findViewById(R.id.image);
        viewgroup = (ViewGroup)findViewById(R.id.main_layout);

add.setOnClickListener(new AddOnClickListener());
        delete.setOnClickListener(new DeleteOnClickListener());
    }

private class AddOnClickListener implements OnClickListener{

public void onClick(View v) {
            // TODO Auto-generated method stub
            //数字后面必须全部加f,否则报错
            ScaleAnimation animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
                                        Animation.RELATIVE_TO_SELF, 0.5f,
                                        Animation.RELATIVE_TO_SELF, 0.5f);
            animation.setStartOffset(500);
            animation.setDuration(1000);
//            ImageView image_add = new ImageView(MainActivity.this);
//            image_add.setImageResource(R.drawable.london_olympic);
//            viewgroup.addView(image_add, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//            image_add.setAnimation(animation);
            //还是直接用布局文件中的ImageView比较好,否则加入的图片用后面的方法视觉上是删不掉的
            //这里是采用setImageResource方法加载图片到ImageView控件上的。
            imageview.setImageResource(R.drawable.london_olympic);
            //用ViewGroup将ImageView加载到activity中
            viewgroup.addView(imageview, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            //启动ImageView的Animation
            imageview.startAnimation(animation);
        }

}

private class  DeleteOnClickListener implements OnClickListener{

public void onClick(View v) {
            // TODO Auto-generated method stub
            ScaleAnimation animation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f,
                                        Animation.RELATIVE_TO_SELF, 0.5f,
                                        Animation.RELATIVE_TO_SELF, 0.5f);
            animation.setStartOffset(500);
            animation.setDuration(1000);
            //设置AnimationListener
            animation.setAnimationListener(new DeleteAnimationListener());
            imageview.startAnimation(animation);
        }   
    }

private class DeleteAnimationListener implements AnimationListener{

public void onAnimationEnd(Animation animation) {
            // TODO Auto-generated method stub
            viewgroup.removeView(imageview);
        }

public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

}

public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

}

}

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

activity_main.xml:


代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<Button
       android:id="@+id/delete"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:text="Delete Image"
       />

<Button
       android:id="@+id/add"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_above="@+id/delete"
       android:text="Add Image" />
   <ImageView
       android:id= "@+id/image"
       android:layout_width="wrap_content"
       android:layout_height="310dip"
       android:src="@drawable/london_olympic"
       />

</RelativeLayout>

总结:通过本次实验,可以了解到AnimationListener的基本使用方法。

作者:tornadomeet

(0)

相关推荐

  • Android 动画之RotateAnimation应用详解

    android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解RotateAnimation 动画, RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivot

  • Android 动画之TranslateAnimation应用详解

    android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解TranslateAnimation动画,TranslateAnimation比较常用,比如QQ,网易新闻菜单条的动画,就可以用TranslateAnimation实现, 通过TranslateAnimation(float fromXDelta, float toXD

  • Android 动画之ScaleAnimation应用详解

    android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解ScaleAnimation 动画, ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, flo

  • Android开发之图形图像与动画(二)Animation实现图像的渐变/缩放/位移/旋转

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 下面就讲一下Tweene Animations. 主要类: Animation 动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 AnimationSet 动画集 一.AlphaAnimation 其中AlphaAnimatio

  • Android 动画之AlphaAnimation应用详解

    android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解AlphaAnimation 动画,窗口的动画效果,淡入淡出什么的,有些游戏的欢迎动画,logo的淡入淡出效果就使用AlphaAnimation. 直接看代码: 复制代码 代码如下: public class MainActivity extends Activity

  • Android动画之逐帧动画(Frame Animation)实例详解

    本文实例分析了Android动画之逐帧动画.分享给大家供大家参考,具体如下: 在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画.Frame动画可以被定义在XML文件中,也可以完全编码实现. 如果被定义在XML文件中,我们可以放置在/res下的anim或drawable目录中(/res/[anim | drawable]/filename.xml),文件名可以作为资源ID在代码中引用:如果由完全由编码实现,我

  • Android开发之图形图像与动画(四)AnimationListener简介

    就像Button控件有监听器一样,动画效果也有监听器,只需要实现AnimationListener就可以实现对动画效果的监听,其中需要重载三个函数,就是下面的这几个函数: 复制代码 代码如下: private class MyListenr implements AnimationListener{ @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub } @Overri

  • Android Animation实战之屏幕底部弹出PopupWindow

    Android动画的一个实战内容,从屏幕底部滑动弹出PopupWindow. 相信这种效果大家在很多APP上都遇到过,比如需要拍照或者从SD卡选择图片,再比如需要分享某些东西时,大多会采用这么一种效果: 那这种效果如何实现呢? 我们仿写一个这种效果的实例吧: 1)我们首先定义一下,弹出窗口的页面布局组件:take_photo_pop.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

  • Android开发之图形图像与动画(三)Animation效果的XML实现

    使用XML来定义Tween Animation 动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset.动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也

  • Android Tween动画之RotateAnimation实现图片不停旋转效果实例介绍

    主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果:第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似.本文分析 Tween动画的rotate实现旋转效果. 在新浪微博客户端中各个操作进行中时activity的右上角都会有个不停旋转的图标,类似刷新的效果,给用户以操作中的提示.这种非模态的提示方式推荐使用,那么下面就分享下如何实现这种效果

  • Android开发重写Animation实现下拉图片后弹射回去效果示例

    本文实例讲述了Android开发重写Animation实现下拉图片后弹射回去效果.分享给大家供大家参考,具体如下: 1. 解析: 1)interpolatedTime指的是平移的变化率(从0到1) 2)mStartHeight 控件开始的高度 3)endHeight 控件竖直移动后的高度 4)mImageView.requestLayout(); 图片在改变高度后填充布局并固定 5)ValueUtil.evalute(interpolatedTime, mStartHeight, mEndHei

随机推荐