Android DrawableAnimation逐幀動畫載入多圖(OOM的解決)
想做一個逐幀動畫,用了一百來張圖片,結果記憶體溢位了,找了半天最後算是解決了。
本來是在drawable裡面寫一個animation-list,設定ImageView的backgroud,
然後在Activity裡面
animationDrawable = (AnimationDrawable)mImageView.getBackground();
animationDrawable.start();
但是圖片多了就會記憶體溢位了。
最後採用的解決辦法是這個http://www.kankanews.com/ICkengine/archives/86482.shtml
稍微改動了一下。
裡面有三個構造方法,和兩個播放的方法,直接構造就可以播放動畫了
package com.example.animationoom; import android.os.Handler; import android.widget.ImageView; public class SceneAnimation { private ImageView mImageView; private int[] mFrameRess;// 圖片 private int[] mDurations; private int mDuration; private Handler handler = new Handler(); Runnable mRunnable; private int mLastFrameNo; private long mBreakDelay; //引數包括pDurations陣列,執行播放play(1); public SceneAnimation(ImageView pImageView, int[] pFrameRess, int[] pDurations) { mImageView = pImageView; mFrameRess = pFrameRess; mDurations = pDurations; mLastFrameNo = pFrameRess.length - 1; mImageView.setBackgroundResource(mFrameRess[0]); play(1); } //引數包括一個int 的執行時間 pDuration, 執行迴圈播放playConstant(1); public SceneAnimation(ImageView pImageView, int[] pFrameRess, int pDuration) { mImageView = pImageView; mFrameRess = pFrameRess; mDuration = pDuration; mLastFrameNo = pFrameRess.length - 1; mImageView.setBackgroundResource(mFrameRess[0]); playConstant(1); } //引數包括一個int的pDuration,一個long的pBreakDelay,表示每次播放的間隔,執行迴圈播放playConstant(1); public SceneAnimation(ImageView pImageView, int[] pFrameRess,int pDuration, long pBreakDelay) { mImageView = pImageView; mFrameRess = pFrameRess; mDuration = pDuration; mLastFrameNo = pFrameRess.length - 1; mBreakDelay = pBreakDelay; mImageView.setBackgroundResource(mFrameRess[0]); playConstant(1); } private void play(final int pFrameNo) { mRunnable = new Runnable() { public void run() { mImageView.setBackgroundResource(mFrameRess[pFrameNo]); if (pFrameNo == mLastFrameNo) play(0); else play(pFrameNo + 1); } }; handler.postDelayed( mRunnable, mDurations[pFrameNo]); } private void playConstant(final int pFrameNo) { Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { mImageView.setBackgroundResource(mFrameRess[pFrameNo]); if (pFrameNo == mLastFrameNo) playConstant(0); else playConstant(pFrameNo + 1); } }, pFrameNo == mLastFrameNo && mBreakDelay > 0 ? mBreakDelay : mDuration); } };
但是這樣的方法還是有問題,在載入圖片的時候,會有卡頓的現象。
而且目前是不能實現單詞播放的,還需要做些改動。
相關推薦
Android DrawableAnimation逐幀動畫載入多圖(OOM的解決)
想做一個逐幀動畫,用了一百來張圖片,結果記憶體溢位了,找了半天最後算是解決了。 本來是在drawable裡面寫一個animation-list,設定ImageView的backgroud, 然後在Activity裡面animationDrawable = (Animatio
Android逐幀動畫,逐幀動畫載入圖片過多時OOM異常的解決和替代方法
1.首先新增逐幀動畫 播放逐幀動畫,在工程中res目錄下建立一個anim資料夾,新增動畫anim_welcome.xml檔案如下: <?xml version="1.0" encoding="utf-8"?> <animation-li
Android 自定義 HorizontalScrollView 打造再多圖片(控制元件)也不怕 OOM 的橫向滑動效果
自從Gallery被谷歌廢棄以後,Google推薦使用ViewPager和HorizontalScrollView來實現Gallery的效果。的確HorizontalScrollView可以實現Gallery的效果,但是HorizontalScrollView存在一個很大的問
Android中Scrollview、ViewPager衝突問題彙總(已解決)
顯示問題: 1、設定ScrollView的fillViewPort為true 2、設定ViewPager的layout_height為一個固定高度,比如:100dip 衝突問題: 不過ViewPager顯示出來以後,還有另外一個衝突:ViewPager左右不能滑動了!是的
Android 學習之逐幀動畫(Frame)
http sta ram override start pub fill creat 代碼 幀動畫就是將一些列圖片。依次播放。利用肉眼的“視覺暫留”的原理,給用戶的感覺是動畫的錯覺,逐幀動畫的原理和早期的電影原理是一樣的。 a:須要定義逐幀動畫,能夠通過代碼定義。也能夠
Android動畫效果之Frame Animation(逐幀動畫)
想要 顯示 star 載體 rop 復雜 ide sources post 前言: 上一篇介紹了Android的Tween Animation(補間動畫) Android動畫效果之Tween Animation(補間動畫),今天來總結下Android的另外一種動
Android 動畫之逐幀動畫小述
一、概述 本節主要介紹下逐幀動畫的基本使用,下面我們就從XML方式建立動畫和程式碼方式建立動畫來分別說下吧 二、逐幀動畫介紹 在開始介紹逐幀動畫之前,先來看一下在本例中我們要實現的逐幀動畫的效果 逐幀動畫,我的理解就是將一幀幀的靜態圖片進行有序的展示,利用人眼的視覺
Android動畫基礎之補間動畫與逐幀動畫
Android動畫分類主要分三類: Tweened Animation補間動畫 Frame Animation幀動畫 Property Animation屬性動畫 現在我們來介紹一下補間動畫。Tweened Animation補間動畫,是通過配置動畫檔案
Android動畫基礎【1】——(逐幀動畫)
動畫的意義: 1. 增強視覺效果 2. 更好的引導使用者 整個課程目標: 1. 瞭解定義逐幀動畫的方法 2. 瞭解定義視覺動畫的方法 3. 瞭解定義屬性動畫的方法 整個課程的學習內容: 1. 逐幀動畫 2. 視覺動畫系統 3. 屬
Android 用Animation-list實現逐幀動畫
第一步:先上圖片素材,以下素材放到res/drawable目錄下: 圖片素材: 檔名稱: icon1.png icon2.png icon3.png icon4.png icon5.png icon6.p
android動畫 通過AnimationDrawable控制逐幀動畫
效果圖: 當我們點選按鈕時,該圖片會不停的旋轉,當再次點選按鈕時,會停止在當前的狀態。 activity程式碼: [java] view plain copy print?package cn.com.chenzheng_java.animation; import android.app.Acti
Android中的動畫詳解系列【1】——逐幀動畫
逐幀動畫其實很簡單,下面我們來看一個例子:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:andro
Android動畫之animation-list實現逐幀動畫
簡介 幀動畫(Frame Animation又稱Drawable Animation)是最簡單的Android動畫效果,其與電影多重連續幀播放原理相似,通過視覺殘留來讓人感知到動畫效果。其實現方式是將
Android自定義控制元件:動畫類---逐幀動畫AnimationDrawable
1:概述 Android動畫包括View Animation(檢視動畫)和Property Animator(屬性動畫),而View Animation包括Tween An
Android動畫解析(一)-----逐幀動畫和補間動畫
今天專案又用到了動畫,發現之前掌握的那些又遺忘了不少,趁著有時間,再重新捋順一邊。 Android中的動畫分為 逐幀動畫,補間動畫,屬性動畫 三種. 逐幀動畫(Frame Animation) 逐幀動畫:就像GIF圖片一樣,通過一系列的Drawab
Android仿微信開啟紅包動畫(逐幀動畫)
Frame Animation(逐幀動畫): 逐幀動畫(Frame-by-frame Animations)從字面上理解就是一幀挨著一幀的播放圖片,就像放電影一樣。和補間動畫一樣可以通過xml實現也可以通過java程式碼實現。接下來藉助目前專案中的一個開
在android中使用逐幀動畫實現自定義progressbar元件
一 自定義progressbar <1>素材:逐幀圖片若干張(根據自己loading元件的特點製作) <2>定義每張圖片的顯示的順序及時間(定義幀動畫列表) 在res/drawable目錄下, 建立一根標籤為“animation
android之逐幀,補間動畫詳解。
在android的世界中有三種動畫,它們就是逐幀動畫,補間動畫,屬性 動畫。接下來我就分別演示下三種動畫的簡單用法。 各動畫的定義: 逐幀動畫:就是短時間切換圖片,讓人們肉眼看起來是連續的,其實就是播放一組圖片。就相當於gif圖片的生成、還有我們小時候
Android之動畫-逐幀動畫
介紹:“逐幀動畫”,就是將多張圖按照播放動畫片那樣,從第一張圖片播放到最後一張。 animation.xml <?xml version="1.0" encoding="utf-8
Android開發之逐幀動畫優化
Android上如果使用逐幀動畫的話,可以很方便地使用AnimationDrawable,無論是先宣告xml還是直接程式碼裡設定,都是幾分鐘的事,但使用AnimationDrawable有一個致命的弱點,那就是需要一次性載入所有圖片到記憶體,萬一幀數多了或者每張圖片都比較大