android與逐幀動畫:
:
當我們點擊按鈕時,該圖片會不停的運動,當再次點擊按鈕時,會停止在當前的狀態。
或者
一開始時,圖片就會不停的運動.
activity代碼:
package com.nj.test;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.widget.ImageView;/** * * @description android中的逐幀動畫. * 逐幀動畫的原理很簡單,跟電影的播放一樣,一張張類似的圖片不停的切換,當切換速度達到一定值時, * 我們的視覺就會出現殘影,殘影的出現保證了視覺上變化的連續性,這時候圖片的切換看在我們眼中就跟真實的一樣了。 * 想使用逐幀動畫: * 第一步:需要在res/drawable檔案夾下建立一個xml檔案,該檔案詳細定義了動畫播放時所用的圖片、切換每張圖片 * 所用的時間、是否為連續播放等等。(有些文章說,在res/anim檔案夾下放置該檔案,事實證明,會出錯哦) * 第二步:在代碼中,將該動畫布局檔案,賦值給特定的圖片展示控制項,如本例子中的ImageView。 * 第三步:通過imageView.getBackGround()擷取相應的AnimationDrawable對象,然後通過該對象的方法進行控制動畫 */public class ExamplesActivity extends Activity { private ImageView imageViewNumber,imageViewRole; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageViewNumber = (ImageView) findViewById(R.id.imageView_animation1); imageViewNumber.setBackgroundResource(R.drawable.number_animation_drawable); imageViewRole = (ImageView) findViewById(R.id.imageView_role); imageViewRole.setBackgroundResource(R.drawable.role_animation_drawable); } public void myClickHandler(View targetButton){ // 擷取AnimationDrawable對象 AnimationDrawable animationDrawable = (AnimationDrawable)imageViewNumber.getBackground(); AnimationDrawable animationDrawable2 = (AnimationDrawable)imageViewRole.getBackground(); // 動畫是否正在運行 if(animationDrawable.isRunning()){ //停止動畫播放 animationDrawable.stop(); } else if(!animationDrawable.isRunning()){ //開始或者繼續動畫播放 animationDrawable.start(); } // 動畫是否正在運行 if(animationDrawable2.isRunning()){ //停止動畫播放 animationDrawable2.stop(); } else if(!animationDrawable2.isRunning()){ //開始或者繼續動畫播放 animationDrawable2.start(); } } /*** * 一開始就運動 */ public void onWindowFocusChanged(boolean hasFocus) { // 擷取AnimationDrawable對象 AnimationDrawable animation1 = (AnimationDrawable)imageViewNumber.getBackground(); AnimationDrawable animation2 = (AnimationDrawable)imageViewRole.getBackground(); super.onWindowFocusChanged(hasFocus); if(hasFocus){ animation1.start(); animation2.start(); }else{ animation1.stop(); animation2.stop(); } }}
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content" android:layout_height="wrap_content"android:orientation="vertical"><Button android:id="@+id/button_animation1" android:text="動畫開始"android:layout_gravity="center_horizontal" android:layout_width="wrap_content"android:layout_height="wrap_content" android:onClick="myClickHandler"></Button><ImageView android:id="@+id/imageView_animation1"android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"></ImageView><ImageView android:id ="@+id/imageView_role" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" /></LinearLayout>
number_animation_drawable.xml
<?xml version="1.0" encoding="utf-8"?><!-- 根標籤為animation-list,其中oneshot代表著是否只展示一遍,設定為false會不停的迴圈播放動畫根標籤下,通過item標籤對動畫中的每一個圖片進行聲明android:duration 表示展示所用的該圖片的時間長度每個item就是一幀,drawable是該幀顯示的圖片,duration是顯示時間,android:oneshot=”false”表示動畫一直進行,若為true則表示只播放一次動畫 --><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/number0" android:duration="50"></item> <item android:drawable="@drawable/number1" android:duration="50"></item> <item android:drawable="@drawable/number2" android:duration="50"></item> <item android:drawable="@drawable/number3" android:duration="50"></item> <item android:drawable="@drawable/number4" android:duration="50"></item> <item android:drawable="@drawable/number5" android:duration="50"></item></animation-list>
role_animation_drawable.xml
<?xml version="1.0" encoding="utf-8"?><!-- 根標籤為animation-list,其中oneshot代表著是否只展示一遍,設定為false會不停的迴圈播放動畫根標籤下,通過item標籤對動畫中的每一個圖片進行聲明android:duration 表示展示所用的該圖片的時間長度每個item就是一幀,drawable是該幀顯示的圖片,duration是顯示時間,android:oneshot=”false”表示動畫一直進行,若為true則表示只播放一次動畫 --><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/role1" android:duration="60"></item> <item android:drawable="@drawable/role2" android:duration="60"></item> <item android:drawable="@drawable/role3" android:duration="60"></item> <item android:drawable="@drawable/role4" android:duration="60"></item></animation-list>
資源:http://download.csdn.net/detail/niejing654092427/3880651
例子2:
第一步:先片素材,以下素材放到res/drawable目錄下:
圖片素材: |
|
|
|
|
|
|
檔案名稱: |
wifi1.png |
wif2.png |
wifi3.png |
wifi4.png |
wifi5.png |
wifi6.png
|
第二步:上動畫Animation-list幀布局檔案,有2個,一個是按順序顯示動畫,一個是倒序顯示動畫,檔案存放在res/anim目錄下
順序顯示動畫檔案:animation1.xml
<?xml version="1.0" encoding="utf-8"?><!--根標籤為animation-list,其中oneshot代表著是否只展示一遍,設定為false會不停的迴圈播放動畫根標籤下,通過item標籤對動畫中的每一個圖片進行聲明android:duration 表示展示所用的該圖片的時間長度--><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > <item android:drawable="@drawable/wifi1" android:duration="150"> </item> <item android:drawable="@drawable/wifi2" android:duration="150"> </item> <item android:drawable="@drawable/wifi3" android:duration="150"> </item> <item android:drawable="@drawable/wifi4" android:duration="150"> </item> <item android:drawable="@drawable/wifi5" android:duration="150"> </item> <item android:drawable="@drawable/wifi6" android:duration="150"> </item></animation-list>
倒序顯示動畫檔案:animation2.xml
<?xml version="1.0" encoding="utf-8"?><!--根標籤為animation-list,其中oneshot代表著是否只展示一遍,設定為false會不停的迴圈播放動畫根標籤下,通過item標籤對動畫中的每一個圖片進行聲明android:duration 表示展示所用的該圖片的時間長度--><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > <item android:drawable="@drawable/wifi6" android:duration="150"> </item> <item android:drawable="@drawable/wifi5" android:duration="150"> </item> <item android:drawable="@drawable/wifi4" android:duration="150"> </item> <item android:drawable="@drawable/wifi3" android:duration="150"> </item> <item android:drawable="@drawable/wifi2" android:duration="150"> </item> <item android:drawable="@drawable/wifi1" android:duration="150"> </item></animation-list>
第三步:上布局檔案,放在res/layout目錄下,檔案名稱activity_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" > <ImageView android:id="@+id/animationIV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:src="@drawable/animation1" /> <Button android:id="@+id/one_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:text="順序顯示" /> <Button android:id="@+id/stop_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:text="停止" /> <Button android:id="@+id/two_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5px" android:text="倒序顯示" /></LinearLayout>
第四步:上Activity檔案,檔案名稱:MainActivity.java
package com.example.animation;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity{ private ImageView animationIV; private Button buttonA, stopBtn, buttonC; private AnimationDrawable animationDrawable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); animationIV = (ImageView) findViewById(R.id.animationIV); buttonA = (Button) findViewById(R.id.one_btn); stopBtn = (Button) findViewById(R.id.stop_btn); buttonC = (Button) findViewById(R.id.two_btn); buttonA.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub animationIV.setImageResource(R.drawable.animation1); animationDrawable = (AnimationDrawable) animationIV.getDrawable(); animationDrawable.start(); } }); stopBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub animationDrawable = (AnimationDrawable) animationIV.getDrawable(); animationDrawable.stop(); } }); buttonC.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub animationIV.setImageResource(R.drawable.animation2); animationDrawable = (AnimationDrawable) animationIV.getDrawable(); animationDrawable.start(); } }); }}
資源:
http://download.csdn.net/detail/niejing654092427/5540011