androidgif控制項
Ⅰ 為什麼在android中調用新浪微博介面發表的gif圖片不動
查看微博android版sdk中發布圖片的代碼你會發現他是把圖片轉成bitmap了,而gif轉bitmap只會是第一幀圖片,這就是原因。解決方法是,修改這部分代碼,對文件名做一個判斷,如果是.gif的,就不轉成bitmap,直接用文件流發布
Ⅱ Android 實現Gif播放的七種方法
背景:在項目里某個需求實現的時候,有個圖標有一個動畫效果,為了達到UI要求的效果,試過多種方案,在這篇文章中講一下這些方案的用法,以及結合項目的現狀,做的一個方案選擇。
Link: https://github.com/bumptech/glide
Glide是Android上比較常見的圖片載入框架了,在Android上是數一數二的圖片載入框架代表了,當然,早期的類似 ImageLoader , Picasso 這些,算是比較具有歷史性的圖片載入框架了。
Glide載入Gif的話,用到的是 GifDrawable 這個對象,一般我們用
去創建,當然,如果你載入的是 Bitmap 或 GifDrawable,你可以判斷這個可繪制對象是否實現了 Animatable:
Link: https://github.com/koral--/android-gif-drawable
android-gif-drawable也是Android上比較火熱的圖片載入框架
這個庫播放Gif用到的也是 pl.droidsonroids.gif.GifDrawableGifDrawable 對象,不像Glide,它的創建的方式比較簡單
可以根據需求,選擇不同的構造器創建對象
GifDrawable 實現了 Animatable 跟 MediaPlayerControl 介面,所以你可以使用他們各自的方法甚至更多
使用 MediaPlayerControl
MediaPlayer的標准控制項(如VideoView)可用於控制GIF動畫並顯示其當前進度。
只需在 MediaController 上將 GifDrawable 設置為 MediaPlayer ,如下所示:
更多詳細用法見 Github Usage
Link:android.jar-android.graphics.drawable
AnimatedImageDrawable是Android官方推出播放動圖的類,優點是官方穩定高效,缺點是僅支持Android P版本(api=28)以上
使用方法也比較簡單
Link:android.jar-android.graphics
android.graphics.Movie 也是Android自帶的類,可以用來載入播放Gif動畫,實現起來相對來說可能比較繁瑣,官方已經將這個類標記為 @Deprecated {@link android.graphics.drawable.AnimatedImageDrawable} ,但還是有必要講下。
主要的構造方法有:
按來源分別可以從Gif文件的輸入流,文件路徑,位元組數組中得到Movie的實列。然後我們可以通過操作Movie對象來操作Gif文件。
下面介紹下幾個方法:
關鍵是Movie官方沒有給出回調監聽,故我們需要手動做監聽。
有興趣的可以看這一篇文章,寫的很不錯。 Android自定義View播放Gif動畫
當然,除了這些之外,還有跨平台的解決方案,比起傳統的gif文件, Lottie 則是使用json文件來代表動畫源文件。
Lottie 對APK的影響有多大?
Add the dependency to your project build.gradle file:
核心類:
載入動畫:
Lottie 可以載入動畫來自:
最簡單的形式就是使用 LottieAnimationView :
推薦使用 lottie_rawRes ,相對於使用指定的字元串文件名,你可以使用通過 R 文件以靜態的引用形式指定你的動畫文件.
更多詳細介紹及用法見 官方文檔
Link: https://android.googlesource.com/platform/frameworks/ex/+/android-5.0.2_r1/framesequence
FrameSequenceDrawable 更多的是對webp格式的一個支持,所以當要使用時,需要將你的gif轉為webp
來看下主要的構造方法:
使用方法如下:
[Facebook/Fresco] ( https://github.com/facebook/fresco ) 也支持gif的載入,大同小異,這里就不再過多介紹了。
Glide在部分設備上遇到了Gif變慢的問題,詳見 issues_2471
考慮到項目已經集成了Glide了,就不打算再繼續引入第三方的庫了。又因為原素材的問題,無法導出Lottie格式的json文件。
故這一塊當時做的就是 >=androidP 用AnimatedImageDrawable,<androidP 就用Glide,僅供參考。
Ⅲ 怎樣讓android應用啟動gif動起來
1-把GifView.jar加入你的項目。
2-在xml中配置GifView的基本屬性,GifView繼承自View類,和Button、ImageView一樣是一個UI控制項。如:
view plain to clipboardprint <com.ant.liao.GifView android:id="@+id/gif2"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:paddingTop="4px" android:paddingLeft="14px" android:enabled="false" /$amp;>amp;$nbsp;
<com.ant.liao.GifView android:id="@+id/gif2"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:paddingTop="4px" android:paddingLeft="14px" android:enabled="false" />
3-在代碼中配置常用屬性:
view plain to clipboardprint // 從xml中得到GifView的句柄
gf1 = (GifView) findViewById(R.id.gif1);
// 設置Gif圖片源
gf1.setGifImage(R.drawable.gif1);
// 添加監聽器
gf1.setOnClickListener(this);
// 設置顯示的大小,拉伸或者壓縮
gf1.setShowDimension(300, 300);
// 設置載入方式:先載入後顯示、邊載入邊顯示、只顯示第一幀再顯示
gf1.setGifImageType(GifImageType.COVER);
// 從xml中得到GifView的句柄
gf1 = (GifView) findViewById(R.id.gif1);
// 設置Gif圖片源
gf1.setGifImage(R.drawable.gif1);
// 添加監聽器
gf1.setOnClickListener(this);
// 設置顯示的大小,拉伸或者壓縮
gf1.setShowDimension(300, 300);
// 設置載入方式:先載入後顯示、邊載入邊顯示、只顯示第一幀再顯示
gf1.setGifImageType(GifImageType.COVER);
GifView的Jar包共有四個類:
GifAction.java
觀察者類,監視GIF是否載入成功
GifFrame.java
裡面三個成員:當前圖片、延時、下張Frame的鏈接。
GifDecoder.java
解碼線程類
GifView.java
主類,包括常用方法,如GifView構造方法、設置圖片源、延遲、繪制等。
Ⅳ 有哪些常用或優秀的 Android 第三方類庫
Android開發第三方類庫分類:
gifview 、 gifview2
這兩個項目是同一人開發的,用於顯示gif動畫,純java解碼 ,gif圖片過大會產生OOM。
android-gif-drawable
一個也是用於解碼顯示gif的類庫,採用jni解碼,大GIF也不會產生oom,完美運行。
PhotoView
PhotoView 是一款擴展自Android ImageView ,支持通過單點/多點觸摸來進行圖片縮放的智能控制項。使用比較簡單,提供了一個名為PhotoView的控制項,可以直接像普通ImageView那樣使用。
特性:支持單點/多點觸摸,即時縮放圖片;支持平滑滾動;在滑動父控制項下能夠運行良好;(例如:ViewPager)
不同的環境使用不同的類庫,不同的系統也是同樣的道理。