1. 程式人生 > >android中使用android-gif-drawable實現gif圖片解析出每幀圖片

android中使用android-gif-drawable實現gif圖片解析出每幀圖片

hi,大家好:

       好久沒有和大家見面了,因為各方面原因好久沒有更新blog,不過接下來我可能會有更多的時間來寫blog,希望可以給 大家帶來一些有用的知識點,可以幫助大家。

今天要介紹的是我們經常使用到的gif圖片的每幀解析,即給一個gif檔案,可以在android程式碼種獲取gif的總幀數資訊及每幀圖片。

下面就實現一個解析一張gif圖片,獲取每張圖片的bitmap

因為gif如果要自身實現解析可能稍微困難一些,而且穩定性等也不一定好,所以我們採用github評分最高的一個開源庫android-gif-drawable實現

使用開源庫:android-gif-drawable

網上介紹這個開源庫的文章其實大部分都停留在怎麼使用它來直接在ImageView這控制元件進行動畫顯示就ok,幾乎沒有寫怎麼使用android-gif-drawable來解析出gif檔案的每一幀圖片的文章。那如果我們真的有這個想獲取每幀圖片獲取其中的若干幀呢?

1、首先在我們的gradle檔案種引入這個第三方庫:

 'pl.droidsonroids.gif:android-gif-drawable:1.2.12'

2、寫一個GifUtil類

主要分為2步,

第一步獲取gif檔案含有的總幀數 :使用GifDrawable 的getNumberOfFrames();既可以獲取gif的總幀數

第二步在獲取gif總幀數後,如果我們要獲取gif某一幀的Bitmap:使用GifDrawble 的seekToFrameAndGet(index)方法,index就是

需要獲取的第多少幀的index

有了以上2個方法,我們是不是就可以很快的獲取gif具體某一幀的Bitmap了啊

貼程式碼:

package com.android.unokiwi.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;

import java.util.ArrayList;
import java.util.HashMap;

import pl.droidsonroids.gif.GifDrawable;

/**
 * Created by Administrator on 2018/7/8.
 */
public static Bitmap getBitmapArrayByGif(Context context, String assertPath, int index) {
    try {
        ArrayList<Bitmap> list = new ArrayList<>();
        GifDrawable gifFromAssets = new GifDrawable(context.getAssets(), assertPath);//代表android中assert的gif檔名
        int totalCount = gifFromAssets.getNumberOfFrames();
        if (totalCount < index) {
            index = totalCount - 1;
        }
        return gifFromAssets.seekToFrameAndGet(index);
    } catch (Exception e) {
        return null;
    }

好了大概就是上面寫的,很簡單程式碼,希望對有這個業務需求的人一點幫助

歡迎大家轉載,你的鼓勵,才會讓我給大家越來越多的乾貨內容

相關推薦

android使用android-gif-drawable實現gif圖片解析圖片

hi,大家好:        好久沒有和大家見面了,因為各方面原因好久沒有更新blog,不過接下來我可能會有更多的時間來寫blog,希望可以給 大家帶來一些有用的知識點,可以幫助大家。 今天要介紹的是我們經常使用到的gif圖片的每幀解析,即給一個gif檔案,可以在andr

androidRecyclerView控件實現長按彈PopupMenu菜單功能

mage 有一個 手工 sim pat 創建 .get mco span 之前寫過一篇文章:android中實現簡單的聊天功能 現在是在之前功能的基礎上,添加一個長按聊天記錄,刪除對應聊天記錄的功能 RecyclerView控件,沒有對應的長按事件,我們需要自己手工添加

Android自定義drawable資源實現佈局的圓角邊框效果

佈局的圓角邊框效果圖如下所示: 如上圖紅色標註的部分就是一個圓角邊框效果的自定義搜尋框。 實現起來很簡單,讓佈局(Relativelayout或者LinearLayout)的background屬性引用自定義的drawable資源即可。 andro

AndroidRecyclerview使用13----實現瀑布流遇到的各種問題(item移動,載入更多圖片閃爍,以及定製各種型別Header和Footer)

功能:圖片瀑布流 問題1:如何保持已顯示過的imageview的尺寸 解決方法:定義一個HashMap<Integer, Float> indexMap = new HashMap<Integer, Float>();用來儲存已顯示過的Ima

Android Bitmap和Drawable相互轉換的方法

canvas board null height .com factory oar tool pla 1、Drawable --> Bitmap [java] view plain copy Bitmap drawable2Bitmap(Drawabl

androidping命令的實現

ack ces buffered amr 實現 int time() ade article /** * 推斷Ping 網址是否返回成功 * * @param netAddress * @return */ public static String isPingSuc

android定時器的實現學習

資料來自於 簡書 沿路旅程如歌蛻變 點這裡 利用handler.postDelay()方法來實現定時器計時 下面的程式碼實現了6s倒計時,計時後,自動停止計時並移除runnable. public class MainActivity extends AppCompat

一文了解Android路由(Router)的實現

Router 對於一個功能越來越複雜的APP來說,路由對於程式碼的解耦、頁面靈活跳轉配置、頁面攔截功能提供了很好的支援。下面我將分析業界比較出名的兩個路由框架WMRouter和ARouter的原始碼,瞭解他們的實現原理。 這兩個框架的實現核心原理是差不多的: 通過註解標註路由資訊,在編譯期動態掃描路由資訊

android如何使用GPU實現硬體加速,3D渲染

已開通新的部落格,後續文字都會發到新部落格 http://www.0xfree.top --- 首先來看一些名詞解釋     GPU:Graphic  Processing Unit (圖形處理器)&nb

AndroidMQTT的簡單實現(只是連線到伺服器,未實現傳送、接受資訊)

1.新增mqtt包到gradle.build a.在project的gradle.build中新增地址(P:我下載的參考例子是不用新增的,但是我自己寫的時候不新增就編譯不過去) allprojects { repositories { google()

Android使用兩種方式實現類似三隻松鼠首頁圖片滑動居中效果

       昨天做商城專案第2版,UI給出一個了設計圖,商品圖片可以左右滑動對齊,剛開始以為一個Recyclerview加個方向滑動一下就搞定了,做出來後UI說效果不對,參考三隻松鼠商城首頁效果,研究了一下,效果就是每次不管左滑還是右滑圖片都是處於居中位置的,使用了Gall

Android使用JiaoZiVideoPlayer來實現視訊列表播放的效果

目的:我這邊是想做類似於鬥魚直播裡的視訊模組的視訊列表播放形式。 然後下載程式碼,根據自己需要的樣式去找相應的程式碼進行研究。 效果圖如下: 使用步驟: (1)新增遠端依賴: /*呼叫Video視訊播放器*/ implementation 'cn.jzvd:

AndroidBitmap,byte[],Drawable相互轉換

一、相關概念 1、Drawable就是一個可畫的物件,其可能是一張點陣圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,建立相應的可畫物件 2、Canvas畫

AndroidBitmap和Drawable相互轉換

一、相關概念 1、Drawable就是一個可畫的物件,其可能是一張點陣圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,建立相應的可畫物件 2、Canvas畫布,繪圖的

Android微信搶紅包外掛原理解析和開發實現

一、前言自從去年中微信新增搶紅包的功能,微信的電商之旅算是正式開始正式火爆起來。但是作為Android開發者來說,我們在搶紅包的同時意識到了很多問題,就是手動去搶紅包的速度慢了,當然這些有很多原因導致了。或許是網路的原因,而且這個也是最大的原因。但是其他的不可忽略的因素也是要

Android 使用 dlib+opencv 實現動態人臉檢測

1 概述 完成 Android 相機預覽功能以後,在此基礎上我使用 dlib 與 opencv 庫做了一個關於人臉檢測的 demo。該 demo 在相機預覽過程中對人臉進行實時檢測,並將檢測到的人臉用矩形框描繪出來。具體實現原理如下: 採用雙層 View,底層的 TextureView 用於預覽,程式從 T

Android通過ListView的實現簡單新聞列表

Android中實現簡單的新聞列表 “本文主要針對Android新手,大神請繞道…” 使用到的第三方庫 Retrofit2+RxJava2 進行網路請和json資料的解析,註解框架:Butterknife 8.5.1 如果以上的框架還有同學不知道怎麼使用可以看看

android?attr/**與@drawable/**或@color/**等的區別

今天在寫一個Demo,研究主題的時候,遇到了【?attr/colorPrimary】這個用法,由於網上都是千篇一律的回答,所以我只能硬著頭皮去看原始碼了,茶壺煮餃子,暫且記下來,作為備忘錄吧。 一、?

AndroidAlterDialog四種實現樣式

   (1)用於提示資訊  如:是否退出系統?是 OR  否     第一步:例項化AlertDialog.Builder物件     AlertDialog.Builder    builder=new AlertDialog.Builder(this);     ps

Android利用ZipEntry漏洞實現免root寫惡意檔案到應用的沙盒

http://blog.csdn.net/jiangwei0910410003/article/details/52118575   版權宣告:本文為博主原創文章,未經博主允許不得轉載。 目錄(?)[-] 一前言 二漏洞場景分析 三漏洞出現的原因 四