日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Animation动画(很详细)

發布時間:2024/4/15 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Animation动画(很详细) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Animations

一、Animations介紹

Animations是一個實現android UI界面動畫效果的APIAnimations提供了一系列的動畫效果,可以進行旋轉、縮放、淡入淡出等,這些效果可以應用在絕大多數的控件中。?

二、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

四、具體實現

1main.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" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/rotateButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="旋轉" /><Buttonandroid:id="@+id/scaleButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="縮放" /><Buttonandroid:id="@+id/alphaButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="淡入淡出" /><Buttonandroid:id="@+id/translateButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="移動" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><ImageViewandroid: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;@Overridepublic 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.在該標簽當中加入rotatealphascale或者translate標簽;

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

4.在代碼當中使用AnimationUtils當中裝載xml文件,并生成Animation對象。因為AnimationAnimationSet的子類,所以向上轉型,用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是起始透明度和結束時透明度 --><alphaandroid: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軸坐標--><rotateandroid: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軸坐標軸的坐標軸的坐標--><scaleandroid: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軸坐標--><translateandroid: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;@Overridepublic 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.AnimationSetAnimation的子類;

?

???????2.一個AnimationSet包含了一系列的Animation

?

???????3.針對AnimationSet設置一些Animation的常見屬性(如startOffsetduration等),可以被包含在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是起始透明度和結束時透明度 --><alphaandroid:fromAlpha="1.0"android:toAlpha="0.0"android:startOffset="500"android:duration="500"/><translateandroid: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

android:shareInterpolator="true"

3、如果不想共享一個interpolator,則設置android:shareInterpolator="true"并且需要在每一個動畫效果處添加interpolator

<alphaandroid: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"><LinearLayoutandroid:orientation="horizontal"android:layout_height="wrap_content"android:layout_width="wrap_content"><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="運動"/></LinearLayout><LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid: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;@Overridepublic 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 –?引用動畫效果文件

<layoutAnimationxmlns: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"><alphaandroid:fromAlpha="0.0"android:toAlpha="1.0"android:duration="1000"/></set>

3在布局文件main.xml當中為ListVIew添加如下配置

<ListViewandroid: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

<layoutAnimationxmlns: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"><alphaandroid: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"><ListViewandroid:id="@id/android:list"android:layout_width="fill_parent"android:layout_height="wrap_content"android:scrollbars="vertical"android:layoutAnimation="@anim/list_anim_layout"/><Buttonandroid: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;@Overridepublic 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對象:?

LayoutAnimationController controller = new LayoutAnimationController(animation);

4)設置控件的顯示順序以及延遲時間

controller.setOrder(LayoutAnimationController.ORDER_NORMAL); controller.setDelay(0.5f); ????

5)為ListView設置LayoutAnimationController屬性:

listView.setLayoutAnimation(controller);

完整代碼:

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主要包括如下三個方法:

n?????????·onAnimationEnd(Animation animation) -?當動畫結束時調用

n?????????·onAnimationRepeat(Animation animation) -?當動畫重復時調用

n?????????·onAniamtionStart(Animation animation) -?當動畫啟動時調用

2、具體實現

1main.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;@Overridepublic 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);//創建一個新的ImageViewImageView 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{//動畫效果執行完時removepublic 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

viewGroup = (ViewGroup)findViewById(R.id.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)刪除時,直接刪除。

viewGroup.removeView(imageView);

總結

以上是生活随笔為你收集整理的Android Animation动画(很详细)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。