Android中GIF動圖的播放控制和監聽詳解
阿新 • • 發佈:2018-12-26
android下播放gif圖片功能似乎並不常用,很多時候還是以展示靜態圖片為主,可能是由於gif圖體積比較大吧。不過像表情動畫什麼的,可能還是需要gif圖的。本文主要給大家介紹了關於Android中GIF動圖的播放控制和監聽的相關資料,需要的朋友可以參考下。
前言
最近接手的專案裡涉及到了 GIF 動圖的播放與監聽,在上一版本中對於 GIF 的處理是由 H5 來實現的,因為考慮到使用者體驗,因此現在的需求是將這塊兒原生化,途中差點誤入歧途!下面來看看詳細的介紹吧。
Android 中 GIF 動圖處理與監聽
剛開始第一個想到的便是 glide , 但是自認為 glide 不能夠控制 GIF 以及去監聽它,所以網上去搜尋別的方法。看到有一個方案是將圖片分幀,一張張的去用逐幀動畫來實現。
我開始懷疑給這個解決方案的人了,都什麼時代了還做這種費力不討好,大量佔用使用者記憶體的東西!於是乎動手前又仔細 Google 了一番,答案著實令我尷尬,glide 是可以控制 GIF 動畫的!!!
怒上程式碼 :使用glide 載入 GIF 動圖
?1 |
Glide.with(DoorActivity.
this
).load(R.drawable.opendoor).into(openDoorGif);
|
很簡單的一行程式碼就可以搞定,以上方式圖片和動圖都可以載入(網路連結亦可)
下面是隻可以載入 GIF 動圖的寫法:
?1 |
Glide.with(DoorActivity.
this
).load(R.drawable.opendoor).asGif().into(openDoorGif);
|
其實就多了個 asGIF
但是這種方式下的動圖播放一直是迴圈的,有什麼方式可以停下來呢!沒遇到過千萬別說沒必要,假如現在有一個需求,需要點選一下按鈕來播放一次 GIF 實現與使用者的互動呢?這個技能我想你肯定是要 get 的,因為類似需求你遲早會碰到!
下面寫法實現了對 GIF 動圖的控制
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//handler傳送訊息成功的狀態碼
private
static
final
int
MESSAGE_SUCCESS =
4424
;
//handler傳送訊息所攜帶的引數(持續時間)
private
int
duration;
/**
* 載入開門Gif動圖(只播放一次)
* @param view
*/
public
void
loadGif(View view){
Glide.with(
this
)
.load(R.drawable.opendoor)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.listener(
new
RequestListener<Integer, GlideDrawable>() {
@Override
public
boolean
onException(Exception arg0, Integer arg1,
Target<GlideDrawable> arg2,
boolean
arg3) {
return
false
;
}
@Override
public
boolean
onResourceReady(GlideDrawable resource,
Integer model, Target<GlideDrawable> target,
boolean
isFromMemoryCache,
boolean
isFirstResource) {
// 計算動畫時長
GifDrawable drawable = (GifDrawable) resource;
GifDecoder decoder = drawable.getDecoder();
for
(
int
i =
0
; i < drawable.getFrameCount(); i++) {
duration += decoder.getDelay(i);
}
//傳送延時訊息,通知動畫結束
//以下兩個引數都是 int 型,記得如上的宣告
handler.sendEmptyMessageDelayed(MESSAGE_SUCCESS,
duration);
return
false
;
}
})
//僅僅載入一次gif動畫
//此處的引數 1 及時指明播放次數
.into(
new
GlideDrawableImageViewTarget(openDoorGif,
1
));
}
|
使用這種方式就可以完美的實現對 GIF 的控制,對我遇到的需求提供了良性支援!
總結
以上就是這篇文章的全部內容了,希望本文的內容對給位Android開發者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對指令碼之家的支援。