Glide — 播放Gif & 視頻
在前面的文章中,我們一起學習了從各種源加載圖片,一起學習了如何改變圖片大小和縮放等設置。這篇文章會展示給你一個Glide的特性:播放Gif和本地視頻。
Glide 系列概覽
- 入門簡介
- 高級加載
- 適配器(ListView, GridView)
- 占位圖& 淡入淡出動畫
- 圖片大小 & 縮放
- 播放GIF & 視頻
- 緩存基礎
- 請求優(yōu)先級
- 縮略圖
- 回調:定制view中使用SimpleTarget和ViewTarget
- 通知欄和桌面小控件的圖片加載
- 異常: 調試和報錯處理
- 自定義變換
- 用animate()定制動畫
- 整合網絡協(xié)議棧
- 用Modules定制Glide
- Glide Module 案例: 接受自簽名HTTPS證書
- Glide Module 案例: 自定義緩存
- Glide Module 案例: 通過加載自定義大小圖片優(yōu)化
- 動態(tài)使用 Model Loaders
- 如何旋轉圖片
- 系列綜述
播放 Gif動畫
許多圖片加載庫能處理好圖片的加載與顯示,但很多并不支持Gif。如果你的app需要支持Gif,Glide的簡單會讓體驗更驚艷。如果你想要播放Gif,你只要使用之前處理圖片的類似的方法:
String gifUrl = "http://i.kinja-img.com/gawker-media/image/upload/s--B7tUiM5l--/gf2r69yorbdesguga10i.gif";
Glide
.with( context )
.load( gifUrl )
.into( imageViewGif );
上面的代碼會在ImageView里顯示Gif,并自動播放。Glide另外一個非常棒的功能是你仍然可以使用標準的調用去處理Gif。
Glide
.with( context )
.load( gifUrl )
.placeholder( R.drawable.cupcake )
.error( R.drawable.full_cake )
.into( imageViewGif );
Gif 檢查
Glide接受Gif和圖片作為load()的參數。上面代碼中潛在的一個問題,如果提供的源不是Gif,可能是一個普通的圖片。作為開發(fā)者,你當然希望那個URL是一個Gif,但Glide不能自動檢測到底是不是,這樣引入了一個額外的方法asGif()強迫生成一個Gif:
Glide
.with( context )
.load( gifUrl )
.asGif()
.error( R.drawable.full_cake )
.into( imageViewGif );
如果gifUrl是一個gif,沒有異常發(fā)生。但如果gifUrl不是一個Gif,即使是一個完好的圖片(非Gif),Glide也會加載失敗。.error()回調方法會被調用,并加載錯誤占位圖。
把Gif當作Bitmap播放
如果你的app需要顯示一組網絡URL,可能包括普通的圖片或者Gif。在一些情況下,你可能并不在意是否要播放完整的Gif。如果你只是想要顯示Gif的第一幀,當URl指向的的確是Gif,你可以調用asBitmap()將其作為常規(guī)圖片顯示。
Glide
.with( context )
.load( gifUrl )
.asBitmap()
.into( imageViewGifAsBitmap );
這邊介紹了用Glide所有的知識點去播放Gif,非常簡單,試試吧!
注意事項 ——譯者注##
實際中加載gif并沒有上述的那么簡單,可能會遇到很多問題:
比如加載慢,比如OOM。
1.git圖片大小,圖片格式是否正確,你可以查看下你需要加載的gif圖片大小,需要多長時間。太大的圖片,加載慢,又浪費流量,不利于用戶體驗。
2.網速是不是正常?從chrome里加載一下,看需要多長時間。
3.磁盤緩存策略問題。加載gif,就磁盤緩存還能設置全局緩存么?壓縮調整gif大小,重新編碼,是不是很消耗時間?官方給的方法是使用用:.diskCacheStrategy(DiskCacheStrategy.SOURCE)
4.在ListView等列表控件中滑動的時候,考慮添加 Glide.with(context).pause|resumeRequests() ,可以參考github上的開發(fā)者答復
5.開啟Glide的相關log,查看異常原因,具體問題具體分析。不會開啟的,請閱讀 異常: 調試和報錯處理。
6.還不能解決,再訪問https://github.com/bumptech/glide,看一下里面的issue,搜索一下跟你代碼相關的關鍵字。
播放本地視頻
介紹完Gif,下面介紹一下播放視頻。Glide也能播放存儲在手機上的本地視頻。假設你能通過用戶選擇獲取到視頻文件的路徑:
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide
.with( context )
.load( Uri.fromFile( new File( filePath ) ) )
.into( imageViewGifAsBitmap );
重要提示:這里只對本地視頻有效。對于并非存在本地的視頻(如網絡URL)并不支持!如果你想要從網絡URL播放視頻,參考VideoView。
展望
看完了這篇文章,你應當能夠和處理圖片一樣,處理Gif和本地視頻了。Glide可以讓Gif的播放非常流暢和方便。后續(xù)的文章將要為你介紹Glide的緩存系統(tǒng)。