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

ImgeViewで画面に表示させるときに、元画像のサイズ(縦横)が大きいと表示しきれない事があります。このPicassoを使うと簡単に表示できます。

Android Studio
2021.1.1

 




Picasso

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

 

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

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

img5760x3760

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


レイアウト
 


 
これをNexus5Xで試してみると


というエラーになりました。画像が大きいということです。
Pixel 3aではエラーにはなりませんでしたがワーニングが出ます。
因みに、Nexus5Xでは画像を1/4のimg1440x942では表示できました。

Androidはハイエンドからローエンドまで様々な機種があるので
機種によるパフォーマンス性能の違いは留意する必要があります。

 

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

 
これをPicassoで試してみます。
 
dependencyを設定します。バージョンはこちらで、Picasso にて確認して適宜合わせてください。(新しいバージョンが出ているのですがエラーになる場合もあります)

build.gradle


 

MainActivity.java


 
レイアウト
activity_main.xml


 
これで実行すると、画像が表示されました。
画像が横向きなのでlandscapeにするため回転させています。
 
1x1.trans - [Android] Picasso 大きい画像を扱ってみる

 

assetsから取り込む

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

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

 

画像をダウンロード

 
画像をダウンロードする場合は非同期処理で実行しないといけないので、意外とコードも増えてしまいます。
Picassoでは、これも画像のURLを指定すればダウンロードできてしまいます。
例として https://hoge-hoge.com/image/ 以下に画像を置いて試してみます。
 


 
ただし、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

シェアする

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

フォローする