[Android] ImageView 画像を表示させる3つの方法

アプリで画像を表示させるにはImageViewを使います。画像表示には色々方法がありますが、下のような3つの設定方法について試してみたいと思います。
 

imageview 001 - [Android] ImageView 画像を表示させる3つの方法
レイアウトに直接
imageview 002 170x300 - [Android] ImageView 画像を表示させる3つの方法
drawableから読込
imageview 003 170x300 - [Android] ImageView 画像を表示させる3つの方法
assetsから取込

Android Studio 3.1.3
Android 8.1.0

 



ImageView

 
画像はボタンなどと違って静的なUIとして使うこともあります。例えば背景や、あるいは何かを説明する画像など。
 
ここでは3種類の表示方法を取り上げてみます。尚、画像を後から変えたり、サイズの変更などImageView画像を拡大縮小など動的に扱うこともできます。
 
画像はdrawableにコピー&ペーストします。下は例として
– img_1.jpg
– img_2.jpg
をdrawableに入れています。
また、img_3.jpgのようにassetsフォルダを作って大きな画像を入れることもできます。
 
imageview a01b - [Android] ImageView 画像を表示させる3つの方法
 

 

レイアウトに直接埋め込むケース

 
これは、最初からレイアウトに書き込んでしまうものです。
 
drawable に img_1.jpg を入れた状態で、レイアウトファイル activity_main.xml には以下のように記述します。
また、レイアウトはデフォルトのConstraintLayoutではなくRelativeLayoutを使ってみました。
 
activity_main.xml

 
リソースファイルですが、contentDescriptionを入れろというワーニングに対応しただけです。この画像の説明を入れるわけですが、なくても大丈夫ではあります。
res¥values¥strings.xml

 
以上の設定で画像が表示されました。
 
imageview 001 170x300 - [Android] ImageView 画像を表示させる3つの方法
 
設定内容をみてみると、
 

 
ここでdrawableにある画像 img_1 を表示する source として定義しています。
(jpg, pngの拡張子はいりません)
 

 
画面の縦横一杯の領域で画像を表示する設定ですが、実際の画像ピクセルと表示領域は必ずしも合ってはいません。scaleTypeは fitCenter を使うと画面に合うように拡大縮小してくれます。
 

 
この場合では、MainActivity.java になにも記述する必要はありません。

 

drawable にある画像を読み込む

 
上と同様に画像 img_2.jpg は同じく drawableにあるとして、そのIDコードを

findViewById

で呼びだし setImageResource(ID) で表示します。
コードで画像を呼び出しているので動的に画像の変更ができます。
 

 
レイアウトは、MainActivityで呼ばれるIDに対応させます

android:id=”@+id/image_view_2″
 

 
まとめるとこうなります
MainActivity.java

 
activity_main.xml

 
リソースファイルです
res¥values¥strings.xml

 

imageview 002 170x300 - [Android] ImageView 画像を表示させる3つの方法
 

 

assets に画像を置きそれを取り込む場合

 
assets folder を作ります

「app」右クリック「New」「Folder」「Assets Folder」

imageview 02 300x226 - [Android] ImageView 画像を表示させる3つの方法

そのまま「Finish」

imageview 03 300x277 - [Android] ImageView 画像を表示させる3つの方法
できた assets に画像 img_3.jpg をコピー&ペーストします。
プロジェクトの階層内に入り、フォルダに直接入れることもできます。
..¥app¥src¥main¥assets¥img_3.jpg
 
assets からはファイルの読み出しはtry catchを使って例外処理をするようにします。
これは例外が発生した場合でもアプリが回復できる余地を作ることになります。
また、リソース開放漏れが無いようにfinalyでclose()を入れるか、try-with-resourcesを使います。  

 
これで画像を取り込む記述は InputStream と getAssets().open() を使って このようにします。
 

 
レイアウトは、指定されたID(image_view_3)を使います
 

 
まとめると

MainActivity.java

 
activity_main.xml

 
strings.xml

 
画像が表示されたでしょうか
 
imageview 003 170x300 - [Android] ImageView 画像を表示させる3つの方法

 

drawable VS assets

 
なぜdrawableだけでなくassetsを使うかというと、

  • アイコン画像などを100個以上使うようなケースでassetsではフォルダ分けができます。drawableではベタで放り込むしかありません。
  • assetsからの取り込みの場合はBitmapFactoryを使って画像をダウンサンプリリングすることができるためdrawableよりは比較的大きいファイルを取り込めます。

画像サイズというのはファイルサイズではなく、画像の横 x 縦なので圧縮は関係ありません。なぜならbitmap変換するところがネックなので。

メモリのリミットはAndroidの場合、端末依存なのでこれで大丈夫とは言い切れないのも困ったことで、Android2.x系までカバーする場合は512x512pix程度に抑えた方がいいという噂もあります。
ただ、大きいサイズの画像取り込みに関しては、後述のライブラリーPicassoを使うことである程度可能です。

 

Picasso ライブラリー

 
今さらではありますが、Picasso – Square Open Source というライブラリーがあります。これを使うと例えば5760×3760サイズの画像も表示することができます。Picasso 大きい画像を扱ってみる
 
picasso 01 - [Android] ImageView 画像を表示させる3つの方法

5760×3760の画像

 

関連:

References:
ImageView | Android Developers

Picasso – Square Open Source

モデルは長澤愛紗ちゃん
美人 SNAP

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

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


 


ページのトップへ戻る




シェアする

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

フォローする