国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中GIF動圖的播放控制和監聽詳解

2019-12-12 02:50:54
字體:
來源:轉載
供稿:網友

前言

最近接手的項目里涉及到了 GIF 動圖的播放與監聽,在上一版本中對于 GIF 的處理是由 H5 來實現的,因為考慮到用戶體驗,因此現在的需求是將這塊兒原生化,途中差點誤入歧途!下面來看看詳細的介紹吧。

Android 中 GIF 動圖處理與監聽

剛開始第一個想到的便是 glide , 但是自認為 glide 不能夠控制 GIF 以及去監聽它,所以網上去搜尋別的方法。看到有一個方案是將圖片分幀,一張張的去用逐幀動畫來實現。

我開始懷疑給這個解決方案的人了,都什么時代了還做這種費力不討好,大量占用用戶內存的東西!于是乎動手前又仔細 Google 了一番,答案著實令我尷尬,glide 是可以控制 GIF 動畫的!!!

怒上代碼 :使用glide 加載 GIF 動圖

Glide.with(DoorActivity.this).load(R.drawable.opendoor).into(openDoorGif);

很簡單的一行代碼就可以搞定,以上方式圖片和動圖都可以加載(網絡鏈接亦可)

下面是只可以加載 GIF 動圖的寫法:

Glide.with(DoorActivity.this).load(R.drawable.opendoor).asGif().into(openDoorGif);

其實就多了個 asGIF

但是這種方式下的動圖播放一直是循環的,有什么方式可以停下來呢!沒遇到過千萬別說沒必要,假如現在有一個需求,需要點擊一下按鈕來播放一次 GIF 實現與用戶的交互呢?這個技能我想你肯定是要 get 的,因為類似需求你遲早會碰到!

下面寫法實現了對 GIF 動圖的控制

//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開發者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 哈密市| 伊金霍洛旗| 扎赉特旗| 吉隆县| 博乐市| 岳阳县| 柳林县| 永福县| 凌海市| 景东| 杭锦旗| 友谊县| 石家庄市| 汉沽区| 聂荣县| 宿州市| 黄大仙区| 定州市| 祥云县| 凤阳县| 桓仁| 沾化县| 罗甸县| 大石桥市| 静海县| 长宁区| 宾阳县| 丘北县| 大同县| 五家渠市| 马鞍山市| 正阳县| 比如县| 司法| 策勒县| 炉霍县| 锡林郭勒盟| 黎城县| 公安县| 紫阳县| 积石山|