android中的逐幀動畫

來源:互聯網
上載者:User


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


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.