[Android] Picasso 大きい画像を扱ってみる

ImgeViewで画面に表示させるときに、元画像のサイズ(縦横)が大きいと表示しきれない事があります。このPicassoを使うと簡単に表示できます。
5760×3760サイズの画像を表示してみました。
 
picasso 01 - [Android] Picasso 大きい画像を扱ってみる

Android Studio 3.0.1
Android 8.1.0

 



Picasso

 
Picassoは画像をネットからダウンロードしたり、ギャラリーなどでのキャッシュなど、いい具合に画像を扱ってくれます。
 

 

大きいdrawableの画像を取り込む

 
例えばこのような 5760×3760 サイズの画像をImageViewで表示させてみます。
 
img5760x3760 150x98 - [Android] Picasso 大きい画像を扱ってみる

img5760x3760

 
画像をres\drawable\に入れて、

レイアウト
 

 
これをNexus5Xで試してみると

というエラーになりました。画像が大きいということです。
 
因みに、Nexus5Xでは画像を1/4のimg1440x942では表示できました。

 

Picassoで大きい画像を取り込む

 
これをPicassoで試してみます。
 
dependencyを設定します。バージョンはこちらで、Picasso確認して適宜合わせてください。

build.gradle

 

MainActivity.java

 
これで実行すると、画像が表示されました。
 
picasso 01 - [Android] Picasso 大きい画像を扱ってみる

 

assetsから取り込む

 
drawableから画像を取り込みましたが、assetsからも可能です。画像がたくさんある場合にフォルダー分けできるのでassetsが便利なのですが、try-cathを使ったりとちょっと面倒です。

Picassoではdrawableと同様にできます。assetsは「file:///android_asset/」からのパスで画像を指定すればいいだけです
 

 

画像をダウンロード

 
画像をダウンロードする場合は非同期処理で実行しないといけないので、意外とコードも増えてしまいます。
Picassoでは、これも画像のURLを指定すればダウンロードできてしまいます。
 

 
ただ、Manifestの記述は必要です。
AndroidManifest.xml

 

Picasso設定Option

 
Picassoの設定はこの他にも色々あります。

 

  • fit()
    • レイアウト側で指定したサイズにフィットするサイズです
    • この設定でwrap_contentにすると何も表示されなくなります
  • resize(int pixWidth, int pixHeight)
    • pixelでの設定サイズになります。fitとは同時に使えません
  • resizeDimen(R.dimen.targetWidthResId, R.dimen.targetHeightResId)
    • dpでのサイズ設定ができますが、res\dimenの設定値を使います
  • centerInside()
    • 指定サイズ内に収まるように表示されます
  • centerCrop()
    • 指定サイズを超える場合は画像を切り捨てて表示
  • rotate(float degrees)
    • 画像の回転

このPicassoはこの他にも画像ダウンロードに使えるので非同期でhttp接続などもやってくれます。
また、ギャラリー・フォトなどGridViewのメモリの問題は頭を悩ませるのですが、これもPicassoが使えます。
 
 
 
References:
Picasso
LruCache

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加


 


ページのトップへ戻る




シェアする

  • このエントリーをはてなブックマークに追加

フォローする