1. 程式人生 > >Android動畫之animation-list實現逐幀動畫

Android動畫之animation-list實現逐幀動畫

簡介

幀動畫(Frame Animation又稱Drawable Animation)是最簡單的Android動畫效果,其與電影多重連續幀播放原理相似,通過視覺殘留來讓人感知到動畫效果。其實現方式是將一張張Drawable圖片按順序排列並逐張按時播放來達到實現的動畫效果,對應的實現類是AnimationDrawable。它有兩種實現方式:程式碼實現和XML實現,其中XML實現方式較為簡單。

使用方式

XML實現

1、定義

<?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/arrow_down01" android:duration="150" /> <item android:drawable="@drawable/arrow_down02" android:duration="150" /> <item android:drawable
="@drawable/arrow_down03" android:duration="150" />
<item android:drawable="@drawable/arrow_down04" android:duration="150" /> </animation-list>

其根標籤為animation-list,它有幾個自定義屬性,其中oneshot屬性表示是否只顯示一次,設定為false時將會迴圈播放動畫,設定為true時動畫只執行一次且執行之後停在最後一幀;visible屬性為布林值,設定動畫的可見性,true

為可見,false為不可見,在XML中定義的visible屬性無用,因為它沒有解析;variablePadding屬性也為布林值,表示是否支援可變的Padding,預設為false,表示使用所有幀中最大的Padding,當設定為true時表示drawablePadding值隨當前選擇的狀態而改變。

在根標籤下通過item標籤對動畫中的每一幀進行宣告,每幀中包含其需要展示的Drawable以及其展示的時間,drawable可以是圖片或者顏色,duration表示展示該幀動畫所用的時間長度。

2、使用

  • 獲取動畫物件
AnimationDrawable animationDrawable = (AnimationDrawable) mIvView.getDrawable();
AnimationDrawable animationDrawable = (AnimationDrawable) mTvView.getBackground();
  • 開始動畫
if (!animationDrawable.isRunning()) {
    animationDrawable.start();
}
  • 結束動畫
if (animationDrawable.isRunning()) {
    animationDrawable.stop();
}

程式碼實現

1、定義

AnimationDrawable mAnimationDrawable = new AnimationDrawable();
mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue01), 150);
mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue02), 150);
mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue03), 150);
mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue04), 150);
mAnimationDrawable.addFrame(getResources().getDrawable(R.color.blue05), 150);
mAnimationDrawable.setOneShot(false);

boolean setVisible(boolean visible, boolean restart)visible表示動畫是否可見,restart的值設定為true時表示從第一幀開始播放動畫,設定為false時表示從最近的幀開始執行動畫。
2、使用

  • 設定動畫
mTvAnimation.setBackgroundDrawable(mAnimationDrawable);
mIvArrow.setImageDrawable(mAnimationDrawable);
  • 開始動畫
if (!mAnimationDrawable.isRunning()) {
    mAnimationDrawable.start();
}
  • 結束動畫
if (mAnimationDrawable.isRunning()) {
    mAnimationDrawable.stop();
}
  • 若同一個動畫既給TextView做背景,又給ImageView做前景,此時呼叫start方法會出現什麼情況呢?
mIvAnimation.setImageDrawable(mAnimationDrawable);
mTvAnimation.setBackgroundDrawable(mAnimationDrawable);
if (!mAnimationDrawable.isRunning()) {
    mAnimationDrawable.start();
}

此時ImageView顯示的是動畫的第一幀,TextView執行動畫效果。

mTvAnimation.setBackgroundDrawable(mAnimationDrawable);
mIvAnimation.setImageDrawable(mAnimationDrawable);
if (!mAnimationDrawable.isRunning()) {
    mAnimationDrawable.start();
}

此時TextView顯示的是動畫的第一幀,ImageView執行動畫效果。

綜上所述:同一個AnimationDrawable物件的start()方法只在最後一個應用它的View上生效。

以上就是animation-list實現逐幀動畫的常用方式,希望與大家一起共勉。

專案地址 ☞ 傳送門

相關推薦

Android動畫animation-list實現動畫

簡介 幀動畫(Frame Animation又稱Drawable Animation)是最簡單的Android動畫效果,其與電影多重連續幀播放原理相似,通過視覺殘留來讓人感知到動畫效果。其實現方式是將

AndroidAnimation-list實現動畫

第一步:先上圖片素材,以下素材放到res/drawable目錄下: 圖片素材: 檔名稱: icon1.png icon2.png icon3.png icon4.png icon5.png icon6.p

利用css3-animation來製作動畫

前言 趁著還沒有元旦之前先碼一篇文章,不然到時候估計又被各種虐了,所以趁現在還有力氣先來一篇。今天來聊聊css3中的動畫屬性animation,對這個屬性懵懂是在很早的時候有前輩用這個 animation 屬性來寫了一個菊花打轉的loading,然後google了一下知道了有這麼一個css動畫元件叫做 an

Android動畫解析(一)-----動畫和補間動畫

今天專案又用到了動畫,發現之前掌握的那些又遺忘了不少,趁著有時間,再重新捋順一邊。 Android中的動畫分為 逐幀動畫,補間動畫,屬性動畫 三種. 逐幀動畫(Frame Animation) 逐幀動畫:就像GIF圖片一樣,通過一系列的Drawab

Android動畫效果Frame Animation動畫

想要 顯示 star 載體 rop 復雜 ide sources post 前言: 上一篇介紹了Android的Tween Animation(補間動畫) Android動畫效果之Tween Animation(補間動畫),今天來總結下Android的另外一種動

Android 學習動畫(Frame)

http sta ram override start pub fill creat 代碼 幀動畫就是將一些列圖片。依次播放。利用肉眼的“視覺暫留”的原理,給用戶的感覺是動畫的錯覺,逐幀動畫的原理和早期的電影原理是一樣的。 a:須要定義逐幀動畫,能夠通過代碼定義。也能夠

Android 動畫動畫小述

一、概述 本節主要介紹下逐幀動畫的基本使用,下面我們就從XML方式建立動畫和程式碼方式建立動畫來分別說下吧 二、逐幀動畫介紹 在開始介紹逐幀動畫之前,先來看一下在本例中我們要實現的逐幀動畫的效果 逐幀動畫,我的理解就是將一幀幀的靜態圖片進行有序的展示,利用人眼的視覺

Android動畫基礎補間動畫動畫

Android動畫分類主要分三類: Tweened Animation補間動畫 Frame Animation幀動畫 Property Animation屬性動畫 現在我們來介紹一下補間動畫。Tweened Animation補間動畫,是通過配置動畫檔案

android中使用動畫實現自定義progressbar元件

一 自定義progressbar   <1>素材:逐幀圖片若干張(根據自己loading元件的特點製作)   <2>定義每張圖片的顯示的順序及時間(定義幀動畫列表)       在res/drawable目錄下,  建立一根標籤為“animation

Android動畫-動畫

介紹:“逐幀動畫”,就是將多張圖按照播放動畫片那樣,從第一張圖片播放到最後一張。 animation.xml <?xml version="1.0" encoding="utf-8

Android開發動畫優化

Android上如果使用逐幀動畫的話,可以很方便地使用AnimationDrawable,無論是先宣告xml還是直接程式碼裡設定,都是幾分鐘的事,但使用AnimationDrawable有一個致命的弱點,那就是需要一次性載入所有圖片到記憶體,萬一幀數多了或者每張圖片都比較大

animation中的steps()動畫

在我們平時做寬高確定,需要背景圖片切換的效果時,我如果用的是一張大的png圖片。而且恰好是所有小圖都是從左向右排列的,那麼 我們只需測量出某一個小圖距左側有多少畫素(x),然後我們banckground-position:-x 0;就可以顯示出來當前我們想要的這個小圖。 用steps(n,start/end

Android動畫基礎【1】——(動畫

動畫的意義: 1. 增強視覺效果   2. 更好的引導使用者 整個課程目標:  1. 瞭解定義逐幀動畫的方法 2. 瞭解定義視覺動畫的方法 3. 瞭解定義屬性動畫的方法 整個課程的學習內容: 1. 逐幀動畫 2. 視覺動畫系統 3. 屬

android動畫 通過AnimationDrawable控制動畫

效果圖: 當我們點選按鈕時,該圖片會不停的旋轉,當再次點選按鈕時,會停止在當前的狀態。 activity程式碼: [java] view plain copy print?package cn.com.chenzheng_java.animation;  import android.app.Acti

Android DrawableAnimation動畫載入多圖(OOM的解決)

想做一個逐幀動畫,用了一百來張圖片,結果記憶體溢位了,找了半天最後算是解決了。 本來是在drawable裡面寫一個animation-list,設定ImageView的backgroud, 然後在Activity裡面animationDrawable = (Animatio

Android中的動畫詳解系列【1】——動畫

逐幀動畫其實很簡單,下面我們來看一個例子:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:andro

Android動畫動畫載入圖片過多時OOM異常的解決和替代方法

1.首先新增逐幀動畫 播放逐幀動畫,在工程中res目錄下建立一個anim資料夾,新增動畫anim_welcome.xml檔案如下: <?xml version="1.0" encoding="utf-8"?> <animation-li

Android自定義控制元件:動畫類---動畫AnimationDrawable

1:概述             Android動畫包括View Animation(檢視動畫)和Property Animator(屬性動畫),而View Animation包括Tween An

HTML5 Canvas 動畫實現

和C++遊戲開發相同,HTML5逐幀動畫需要的影象元素也是一張繪製了每一幀影象效果的圖片。通過迴圈繪製各幀的影象來實現動畫的效果。 本示例中演示的是一個小人,預設狀態下,小人朝右方站立;按下左/右方向鍵的時候,小人朝左/右方奔跑(在畫布中沒有位移);鬆開按鍵後保持奔跑的

Android仿微信開啟紅包動畫動畫

Frame Animation(逐幀動畫):        逐幀動畫(Frame-by-frame Animations)從字面上理解就是一幀挨著一幀的播放圖片,就像放電影一樣。和補間動畫一樣可以通過xml實現也可以通過java程式碼實現。接下來藉助目前專案中的一個開