画像取得ライブラリの Glide 使ってみた
Android で画像を表示する際、 URL からいい感じにキャッシュしていい感じに表示してくれるライブラリはいくつかあります。
有名所だと
日本だとなんとなく Picasso をよく見かける気がする。
元々 PhotoLinkViewer では Picasso を用いていて、アニメーション GIF は webView で表示していたのですが、 Glide がアニメーション GIF に対応しているとのことで Glide を使ってみました。
使い方の説明は以下に詳しいです。
上に書いてあるとおりカスタムがしやすい Picasso と言った感じ*2で、インターフェースもそっくりなので適当に Picasso を Glide に置き換えるだけで動きます。すごい。
move to glide from picasso · nonylene/PhotoLinkViewer-Core@a11fe73 · GitHub
OkHttp や Volley にも対応していて、さらに GlideModule
を使えば自分の OkHttpClient
も使えて便利。
Integration Libraries · bumptech/glide Wiki · GitHub
アニメーションGIFについて
さて、目的はアニメーションGIFな訳ですが一筋縄には行きませんでした。
軽いアニメーションGIF(500*500程度) では軽快に動くのですが、 1980 * 1080 ぐらいになるとよくOOMで落ちてしまいます。
.asBitmap()
を指定すると細かい画像の縮小ロードの設定ができるのですが、GIF だとできないので BitmapOptions.inSampleSize
レベルではあまり縮小してくれない。*3
ttps://www.reddit.com/r/androiddev/comments/2tpwub/glide_35_released/co1hmsx*4
そもそもまだ縮小してデコードするのに完全に対応していないらしい。
OOM loading huge gifs · Issue #83 · bumptech/glide · GitHub
メモリキャッシュをスキップしたり、 AndoridManifest.xml
に android:largeHeap="true"
を設定すると落ちにくくはなったのですが、そこまでしても結局GIFの拡大・縮小操作やアニメーション自体が非常に重くなってしまいました。
回る速度が全然違って厳しい(パフォーマンス~~) https://t.co/rrYVM5j2a9
— ☇ (@nonylene) July 30, 2016
その後結局諦めて webView で表示するようにしました。 webView だと 3000px ぐらいでも落ちることがなく、比較的滑らかです。
小さい GIF の表示にでは簡単に GIF を入れることができて非常に便利そうなので、また機会があれば使おうという感じでした。*5
その他
- Fresco という Facebook の画像ライブラリもアニメーションGIFに対応していて多機能そうだったのですが、ダウンサンプリングにはまだあまり対応しておらず、コードも大きい等いろいろ面倒そうだったので使っていません。
- Ion というライブラリも対応していますが、これはもうちょっと汎用的ななんでもライブラリっぽい。