Android编程之Animation动画详解
本文实例讲述了android编程之animation动画用法。分享给大家供大家参考,具体如下:
animations
一、animations介绍
animations是一个实现android ui界面动画效果的api,animations提供了一系列的动画效果,可以进行旋转、缩放、淡入淡出等,这些效果可以应用在绝大多数的控件中。
二、animations的分类
animations从总体上可以分为两大类:
1.tweened animations:该类animations提供了旋转、移动、伸展和淡出等效果。alpha——淡入淡出,scale——缩放效果,rotate——旋转,translate——移动效果。
2.frame-by-frame animations:这一类animations可以创建一个drawable序列,这些drawable可以按照指定的时间间歇一个一个的显示。
三、animations的使用方法(代码中使用)
animations extends object implements cloneable
使用tweenedanimations的步骤:
1.创建一个animationset对象(animation子类);
2.增加需要创建相应的animation对象;
3.更加项目的需求,为animation对象设置相应的数据;
4.将animatin对象添加到animationset对象当中;
5.使用控件对象开始执行animationset。
tweened animations的分类
1、alpha:淡入淡出效果
2、scale:缩放效果
3、rotate:旋转效果
4、translate:移动效果
animation的四个子类:
alphaanimation、translateanimation、scaleanimation、rotateanimation
四、具体实现
1、main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <button android:id="@+id/rotatebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="旋转" /> <button android:id="@+id/scalebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="缩放" /> <button android:id="@+id/alphabutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="淡入淡出" /> <button android:id="@+id/translatebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="移动" /> </linearlayout> <linearlayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <imageview android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true" android:src="@drawable/an" /> </linearlayout> </linearlayout>
2、.java文件
importandroid.app.activity; importandroid.os.bundle; importandroid.view.view; importandroid.view.view.onclicklistener; import android.view.animation.alphaanimation; import android.view.animation.animation; importandroid.view.animation.animationset; importandroid.view.animation.rotateanimation; importandroid.view.animation.scaleanimation; import android.view.animation.translateanimation; importandroid.widget.button; importandroid.widget.imageview; public class animation1activity extends activity { private button rotatebutton = null; private button scalebutton = null; private button alphabutton = null; private button translatebutton = null; private imageview image = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); rotatebutton = (button)findviewbyid(r.id.rotatebutton); scalebutton = (button)findviewbyid(r.id.scalebutton); alphabutton = (button)findviewbyid(r.id.alphabutton); translatebutton = (button)findviewbyid(r.id.translatebutton); image = (imageview)findviewbyid(r.id.image); rotatebutton.setonclicklistener(newrotatebuttonlistener()); scalebutton.setonclicklistener(newscalebuttonlistener()); alphabutton.setonclicklistener(newalphabuttonlistener()); translatebutton.setonclicklistener( new translatebuttonlistener()); } class alphabuttonlistener implementsonclicklistener{ public void onclick(view v) { //创建一个animationset对象,参数为boolean型, //true表示使用animation的interpolator,false则是使用自己的 animationset animationset = new animationset(true); //创建一个alphaanimation对象,参数从完全的透明度,到完全的不透明 alphaanimation alphaanimation = new alphaanimation(1, 0); //设置动画执行的时间 alphaanimation.setduration(500); //将alphaanimation对象添加到animationset当中 animationset.addanimation(alphaanimation); //使用imageview的startanimation方法执行动画 image.startanimation(animationset); } } class rotatebuttonlistener implementsonclicklistener{ public void onclick(view v) { animationset animationset = new animationset(true); //参数1:从哪个旋转角度开始 //参数2:转到什么角度 //后4个参数用于设置围绕着旋转的圆的圆心在哪里 //参数3:确定x轴坐标的类型,有absolut绝对坐标、relative_to_self相对于自身坐标、relative_to_parent相对于父控件的坐标 //参数4:x轴的值,0.5f表明是以自身这个控件的一半长度为x轴 //参数5:确定y轴坐标的类型 //参数6:y轴的值,0.5f表明是以自身这个控件的一半长度为x轴 rotateanimation rotateanimation = new rotateanimation(0, 360, animation.relative_to_self,0.5f, animation.relative_to_self,0.5f); rotateanimation.setduration(1000); animationset.addanimation(rotateanimation); image.startanimation(animationset); } } class scalebuttonlistener implementsonclicklistener{ public void onclick(view v) { animationset animationset = new animationset(true); //参数1:x轴的初始值 //参数2:x轴收缩后的值 //参数3:y轴的初始值 //参数4:y轴收缩后的值 //参数5:确定x轴坐标的类型 //参数6:x轴的值,0.5f表明是以自身这个控件的一半长度为x轴 //参数7:确定y轴坐标的类型 //参数8:y轴的值,0.5f表明是以自身这个控件的一半长度为x轴 scaleanimation scaleanimation = new scaleanimation( 0, 0.1f,0,0.1f, animation.relative_to_self,0.5f, animation.relative_to_self,0.5f); scaleanimation.setduration(1000); animationset.addanimation(scaleanimation); image.startanimation(animationset); } } class translatebuttonlistener implementsonclicklistener{ public void onclick(view v) { animationset animationset = new animationset(true); //参数1~2:x轴的开始位置 //参数3~4:y轴的开始位置 //参数5~6:x轴的结束位置 //参数7~8:x轴的结束位置 translateanimation translateanimation = new translateanimation( animation.relative_to_self,0f, animation.relative_to_self,0.5f, animation.relative_to_self,0f, animation.relative_to_self,0.5f); translateanimation.setduration(1000); animationset.addanimation(translateanimation); image.startanimation(animationset); } } }
tween animations的通用方法
1、setduration(long durationmills)
设置动画持续时间(单位:毫秒)
2、setfillafter(boolean fillafter)
如果fillafter的值为true,则动画执行后,控件将停留在执行结束的状态
3、setfillbefore(boolean fillbefore)
如果fillbefore的值为true,则动画执行后,控件将回到动画执行之前的状态
4、setstartoffset(long startoffset)
设置动画执行之前的等待时间
5、setrepeatcount(int repeatcount)
设置动画重复执行的次数
在代码中使用animations可以很方便的调试、运行,但是代码的可重用性差,重复代码多。同样可以在xml文件中配置animations,这样做可维护性变高了,只不过不容易进行调试。
一、在xml中使用animations步骤
1.在res文件夹下建立一个anim文件夹;
2.创建xml文件,并首先加入set标签,更改标签如下:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> </set>
3.在该标签当中加入rotate,alpha,scale或者translate标签;
<alpha android:fromalpha="1.0" android:toalpha="0.0" android:startoffset="500" android:duration="500"/>
4.在代码当中使用animationutils当中装载xml文件,并生成animation对象。因为animation是animationset的子类,所以向上转型,用animation对象接收。
animation animation = animationutils.loadanimation( animation1activity.this, r.anim.alpha); // 启动动画 image.startanimation(animation);
二、具体实现
1、 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"> <!-- fromalpha和toalpha是起始透明度和结束时透明度 --> <alpha android:fromalpha="1.0" android:toalpha="0.0" android:startoffset="500" android:duration="500"/> </set>
2、 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"> <!-- fromdegrees:开始的角度 todegrees:结束的角度,+表示是正的 pivotx:用于设置旋转时的x轴坐标 例 1)当值为"50",表示使用绝对位置定位 2)当值为"50%",表示使用相对于控件本身定位 3)当值为"50%p",表示使用相对于控件的父控件定位 pivoty:用于设置旋转时的y轴坐标 --> <rotate android:fromdegrees="0" android:todegrees="+360" android:pivotx="50%" android:pivoty="50%" android:duration="1000"/> </set>
3、 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"> <!-- 起始x轴坐标 止x轴坐标 始y轴坐标 止y轴坐标 轴的坐标 轴的坐标 --> <scale android:fromxscale="1.0" android:toxscale="0.0" android:fromyscale="1.0" android:toyscale="0.0" android:pivotx="50%" android:pivoty="50%" android:duration="1000"/> </set>
4、 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"> <!-- 始x轴坐标 止x轴坐标 始y轴坐标 止y轴坐标 --> <translate android:fromxdelta="0%" android:toxdelta="100%" android:fromydelta="0%" android:toydelta="100%" android:duration="2000"/> </set>
5、 .java文件
importandroid.app.activity; importandroid.os.bundle; importandroid.view.view; importandroid.view.view.onclicklistener; import android.view.animation.animation; importandroid.view.animation.animationutils; import android.widget.button; import android.widget.imageview; public class animation1activity extends activity { private button rotatebutton = null; private button scalebutton = null; private button alphabutton = null; private button translatebutton = null; private imageview image = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); rotatebutton = (button) findviewbyid(r.id.rotatebutton); scalebutton = (button) findviewbyid(r.id.scalebutton); alphabutton = (button) findviewbyid(r.id.alphabutton); translatebutton = (button) findviewbyid(r.id.translatebutton); image = (imageview) findviewbyid(r.id.image); rotatebutton.setonclicklistener(newrotatebuttonlistener()); scalebutton.setonclicklistener(newscalebuttonlistener()); alphabutton.setonclicklistener(newalphabuttonlistener()); translatebutton.setonclicklistener(newtranslatebuttonlistener()); } class alphabuttonlistener implementsonclicklistener { public void onclick(view v) { // 使用animationutils装载动画配置文件 animation animation = animationutils.loadanimation( animation1activity.this, r.anim.alpha); // 启动动画 image.startanimation(animation); } } class rotatebuttonlistener implementsonclicklistener { public void onclick(view v) { animation animation = animationutils.loadanimation( animation1activity.this, r.anim.rotate); image.startanimation(animation); } } class scalebuttonlistener implementsonclicklistener { public void onclick(view v) { animation animation = animationutils.loadanimation( animation1activity.this, r.anim.scale); image.startanimation(animation); } } class translatebuttonlistener implementsonclicklistener { public void onclick(view v) { animation animation = animationutils.loadanimation(animation1activity.this, r.anim.translate); image.startanimation(animation); } } }
animationset的具体使用方法
1.animationset是animation的子类;
2.一个animationset包含了一系列的animation;
3.针对animationset设置一些animation的常见属性(如startoffset,duration等),可以被包含在animationset当中的animation集成;
例:一个animationset中有两个animation,效果叠加
第一种方法:
doubleani.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"> <!-- fromalpha和toalpha是起始透明度和结束时透明度 --> <alpha android:fromalpha="1.0" android:toalpha="0.0" android:startoffset="500" android:duration="500"/> <translate android:fromxdelta="0%" android:toxdelta="100%" android:fromydelta="0%" android:toydelta="100%" android:duration="2000"/> </set>
.java文件中
classdoublebuttonlistener implements onclicklistener { public void onclick(view v) { // 使用animationutils装载动画配置文件 animation animation = animationutils.loadanimation( animation2activity.this, r.anim. doubleani); // 启动动画 image.startanimation(animation); } }
第二种方法:
.java文件中
classdoublebuttonlistener implements onclicklistener { public void onclick(view v) { animationset animationset = new animationset(true); alphaanimation alphaanimation = new alphaanimation(1, 0); rotateanimation rotateanimation = new rotateanimation(0, 360, animation.relative_to_self,0.5f, animation.relative_to_self,0.5f); rotateanimation.setduration(1000); animationset.addanimation(rotateanimation); animationset.addanimation(alphaanimation); image.startanimation(animationset); } }
interpolator的具体使用方法
interpolator定义了动画变化的速率,在animations框架当中定义了以下几种interpolator
? acceleratedecelerateinterpolator:在动画开始与结束的地方速率改变比较慢,在中间的时候速率快。
? accelerateinterpolator:在动画开始的地方速率改变比较慢,然后开始加速
? cycleinterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线
? decelerateinterpolator:在动画开始的地方速率改变比较慢,然后开始减速
? linearinterpolator:动画以均匀的速率改变
分为以下几种情况:
1、在set标签中
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"/>
2、如果在一个set标签中包含多个动画效果,如果想让这些动画效果共享一个interpolator。
3、如果不想共享一个interpolator,则设置android:shareinterpolator="true",并且需要在每一个动画效果处添加interpolator。
<alpha android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromalpha="1.0" android:toalpha="0.0" android:startoffset="500" android:duration="500"/>
4、如果是在代码上设置共享一个interpolator,则可以在animationset设置interpolator。
animationset animationset = newanimationset(true); animationset.setinterpolator(new accelerateinterpolator());
5、如果不设置共享一个interpolator则可以在每一个animation对象上面设置interpolator。
animationset animationset = newanimationset(false); alphaanimation.setinterpolator(new accelerateinterpolator()); rotateanimation.setinterpolator(new decelerateinterpolator());
frame-by-frame animations的使用方法
frame-by-frame animations是一帧一帧的格式显示动画效果。类似于电影胶片拍摄的手法。
main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <linearlayout android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="wrap_content"> <button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="运动"/> </linearlayout> <linearlayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <imageview android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true"/> </linearlayout> </linearlayout>
3、anim.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/a_01" android:duration="50"/> <item android:drawable="@drawable/a_02" android:duration="50"/> <item android:drawable="@drawable/a_03" android:duration="50"/> <item android:drawable="@drawable/a_04" android:duration="50"/> <item android:drawable="@drawable/a_05" android:duration="50"/> <item android:drawable="@drawable/a_06" android:duration="50"/> </animation-list>
4、.java文件
importandroid.app.activity; importandroid.graphics.drawable.animationdrawable; importandroid.os.bundle; importandroid.view.view; importandroid.view.view.onclicklistener; importandroid.widget.button; importandroid.widget.imageview; public class animationsactivity extends activity { private button button = null; private imageview imageview = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); button = (button)findviewbyid(r.id.button); imageview = (imageview)findviewbyid(r.id.image); button.setonclicklistener(newbuttonlistener()); } class buttonlistener implementsonclicklistener{ public void onclick(view v) { imageview.setbackgroundresource(r.anim.anim); animationdrawable animationdrawable = (animationdrawable) imageview.getbackground(); animationdrawable.start(); } } }
layoutanimationscontroller
1、什么是layoutanimationscontroller
layoutanimationscontroller可以用于实现使多个控件按顺序一个一个的显示。
1)layoutanimationscontroller用于为一个layout里面的控件,或者是一个viewgroup里面的控件设置统一的动画效果。
2)每一个控件都有相同的动画效果。
3)控件的动画效果可以在不同的时间显示出来。
4)layoutanimationscontroller可以在xml文件当中设置,以可以在代码当中进行设置。
2、在xml当中使用layoutanimationcontroller
1)在res/anim文件夹下创建一个名为list_anim_layout.xml文件:
android:delay - 动画间隔时间;子类动画时间间隔 (延迟) 70% 也可以是一个浮点数 如“1.2”等
android:animationorder - 动画执行的循序(normal:顺序,random:随机,reverse:反向显示)
android:animation – 引用动画效果文件
<layoutanimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationorder="normal" android:animation="@anim/list_anim"/>
2)创建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:fromalpha="0.0" android:toalpha="1.0" android:duration="1000"/> </set>
3)在布局文件main.xml当中为listview添加如下配置
<listview android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scrollbars="vertical" android:layoutanimation="@anim/list_anim_layout"/>
4)程序结构
5)list_anim_layout.xml
<layoutanimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationorder="normal" android:animation="@anim/list_anim"/>
6)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:fromalpha="0.0" android:toalpha="1.0" android:duration="1000"/> </set>
7)main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <listview android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scrollbars="vertical" android:layoutanimation="@anim/list_anim_layout"/> <button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="测试"/> </linearlayout>
8)item.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:paddingleft="10dip" android:paddingright="10dip" android:paddingtop="1dip" android:paddingbottom="1dip"> <textview android:id="@+id/name" android:layout_width="180dip" android:layout_height="30dip" android:textsize="5pt" android:singleline="true" /> <textview android:id="@+id/sex" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textsize="5pt" android:singleline="true"/> </linearlayout>
9)java文件
public class animation2activity extendslistactivity { private button button = null; private listview listview = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); listview = getlistview(); button = (button)findviewbyid(r.id.button); button.setonclicklistener(newbuttonlistener()); } private listadapter createlistadapter() { list<hashmap<string,string>> list = new arraylist<hashmap<string,string>>(); hashmap<string,string> m1 = new hashmap<string,string>(); m1.put("name", "bauble"); m1.put("sex", "male"); hashmap<string,string> m2 = new hashmap<string,string>(); m2.put("name", "allorry"); m2.put("sex", "male"); hashmap<string,string> m3 = new hashmap<string,string>(); m3.put("name", "allotory"); m3.put("sex", "male"); hashmap<string,string> m4 = new hashmap<string,string>(); m4.put("name", "boolbe"); m4.put("sex", "male"); list.add(m1); list.add(m2); list.add(m3); list.add(m4); simpleadapter simpleadapter = new simpleadapter( this,list,r.layout.item,new string[]{"name","sex"}, new int[]{r.id.name,r.id.sex}); return simpleadapter; } private class buttonlistener implementsonclicklistener{ public void onclick(view v) { listview.setadapter(createlistadapter()); } } }
备注:要将整个动画效果设置到linerlayout中,可以这样设置:
<linearlayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layoutanimation="@anim/list_anim_layout" >
3、在代码当中使用layoutanimationcontroller
1)去掉main.xml中的android:layoutanimation="@anim/list_anim_layout"/>
2)创建一个animation对象:可以通过装载xml文件,或者是直接使用animation的构造方法创建animation对象;
animation animation = (animation) animationutils.loadanimation( animation2activity.this, r.anim.list_anim);
3)创建layoutanimationcontroller对象:
4)设置控件的显示顺序以及延迟时间
controller.setorder(layoutanimationcontroller.order_normal); controller.setdelay(0.5f);
5)为listview设置layoutanimationcontroller属性:
完整代码:
private class buttonlistener implementsonclicklistener { public void onclick(view v) { listview.setadapter(createlistadapter()); animation animation = (animation) animationutils.loadanimation( animation2activity.this, r.anim.list_anim); layoutanimationcontroller controller = new layoutanimationcontroller(animation); controller.setorder(layoutanimationcontroller.order_normal); controller.setdelay(0.5f); listview.setlayoutanimation(controller); } }
animationlistener
1、什么是animationlistener
1).animationlistener是一个监听器,该监听器在动画执行的各个阶段会得到通知,从而调用相应的方法;
2).animationlistener主要包括如下三个方法:
① onanimationend(animation animation) - 当动画结束时调用
② onanimationrepeat(animation animation) - 当动画重复时调用
③ onaniamtionstart(animation animation) - 当动画启动时调用
2、具体实现
1)main.xml
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <button android:id="@+id/addbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:text="添加图片" /> <button android:id="@+id/deletebutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@id/addbutton" android:text="删除图片" /> <imageview android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true" android:layout_margintop="100dip" android:src="@drawable/an" /> </relativelayout>
2).java文件
public class animation2activity extends activity { private button addbutton = null; private button deletebutton = null; private imageview imageview = null; private viewgroup viewgroup = null; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); addbutton = (button)findviewbyid(r.id.addbutton); deletebutton = (button)findviewbyid(r.id.deletebutton); imageview = (imageview)findviewbyid(r.id.image); //linearlayout下的一组控件 viewgroup = (viewgroup)findviewbyid(r.id.layout); addbutton.setonclicklistener(newaddbuttonlistener()); deletebutton.setonclicklistener(newdeletebuttonlistener()); } private class addbuttonlistener implements onclicklistener{ public void onclick(view v) { //淡入 alphaanimation animation = new alphaanimation(0.0f, 1.0f); animation.setduration(1000); animation.setstartoffset(500); //创建一个新的imageview imageview newimageview = new imageview( animation2activity.this); newimageview.setimageresource(r.drawable.an); viewgroup.addview(newimageview, new layoutparams( layoutparams.fill_parent, layoutparams.wrap_content)); newimageview.startanimation(animation); } } private class deletebuttonlistener implements onclicklistener{ public void onclick(view v) { //淡出 alphaanimation animation = new alphaanimation(1.0f, 0.0f); animation.setduration(1000); animation.setstartoffset(500); //为aniamtion对象设置监听器 animation.setanimationlistener( new removeanimationlistener()); imageview.startanimation(animation); } } private class removeanimationlistener implements animationlistener{ //动画效果执行完时remove public void onanimationend(animation animation) { system.out.println("onanimationend"); viewgroup.removeview(imageview); } public void onanimationrepeat(animation animation) { system.out.println("onanimationrepeat"); } public void onanimationstart(animation animation) { system.out.println("onanimationstart"); } } }
3、总结一下
可以在activity中动态添加和删除控件,方法是:
1)取到那个layout
2)添加时,先创建对象,然后添加
imageview newimageview = new imageview( animation2activity.this); newimageview.setimageresource(r.drawable.an); viewgroup.addview(newimageview, new layoutparams( layoutparams.fill_parent, layoutparams.wrap_content));
3)删除时,直接删除。
希望本文所述对大家android程序设计有所帮助。