四章:画像を出す

初めてのプログラミングが終わって調子が出てきた人には申し訳ないが、今回プログラムはちょっとしかいじらない。
しかし、結構大事なところだからしっかりやっておくことをオススメする。

・画像を導入する

 まずはいつも通りにプロジェクトを作成する。
 なんか自分の好きな画像でも用意しておく。(ファイル名は半角英数および「_(アンダーバー)」のみ)
 用意した画像はプロジェクト内にコピーしなきゃいけないが、残念なことに画像を置いておけそうなフォルダーは
 デフォルトでは存在しない。なので"layout"フォルダーや"values"フォルダーが入っている"res"フォルダーを
 右クリック→新規→フォルダーで"drawable"フォルダーを作成し、そこにファイルをコピーする。
 ※最初からあるdrawable-うんたらかんたらフォルダーにはそれぞれのサイズのアイコンが入っている。
  よって、そんなフォルダーに画像を入れたら管理が面倒なことこの上ない。

 作成したフォルダーに用意した画像を突っ込む。

・画像を表示する

 前回のボタンを一個表示してクリックに対応させるところまで打つ。
 今回編集する部分はonClick内とレイアウトファイルとstrings.xml。
 こんな感じになる。(***は各自置き換える。xmlの//以降は削除する。)
 丸コピなんてさせないんだからねっ!
・activtiy_main.xml(レイアウトファイル)
+ クリックして開く
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10.  
  11. <Button
  12. android:id="@+id/button01"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="@string/button_touch" />
  16.  
  17. <ImageView
  18. android:contentDescription="@string/***"//画像が出せないときに代わりに表示する文字列
  19. android:id="@+id/***"←イメージを使用する際の名前
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content" />
  22.  
  23. </RelativeLayout>
  24.  
・strings.xml
+ クリックして開く
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.  
  4. <string name="app_name">Graphic</string>
  5. <string name="action_settings">Settings</string>
  6. <string name="button_touch">show</string>
  7. <string name="***">***</string>//代わりに表示する文字列
  8.  
  9. </resources>
  10.  
  11.  
  12. </RelativeLayout>
  13.  
・MainActivity.java
+ クリックして開く
  1. public class MainActivity extends Activity implements OnClickListener{
  2.  
  3.  @Override
  4.  protected void onCreate(Bundle savedInstanceState) {
  5.   super.onCreate(savedInstanceState);
  6.   setContentView(R.layout.activity_main);
  7.  
  8.   //ボタンのクリックイベントを使えるようにする
  9.   Button button = (Button) findViewById(R.id.button01);
  10.   button.setOnClickListener(this);
  11.  }
  12.  
  13.  @Override
  14.  public void onClick(View v)
  15.  {
  16.   ImageView img = (ImageView)findViewById(R.id.***);//レイアウトファイルに指定したID
  17.  
  18.   img.setImageResource(R.drawable.***);//リソース名
  19.  }
  20.  
  21. }
  22.  

・今回使用したものの解説

 ・ImageView…ボタンを表示したときみたいにイメージを表示するためのもの。
        リソース(今回の場合表示するために読み込んだ画像)をセットすることで表示が可能。
        画像が表示できなかったときの為に"android:contentDescription"をレイアウトファイル内に
        設定しておくと、strings.xmlから紐付けられた文字列を代わりに表示する。
        実際に読み込ませる画像はプログラム側で設定できるので、画像を画面に一枚描画するだけならば
        一つのImageViewだけで複数の画像を一枚ずつ切り替えながら表示することも可能。

 ・setImageResource…ImageViewでリソースをセットするときに使った関数。
           今回はdrawable内の画像をセットした。

・「R」について

 "R.id.***"やら"R.drawable.***"をおまじないのように使ってきたわけだが、
 「Rって何ぞ?」と思っている人はたくさんいるんじゃないかと思う。
 その正体だが、好奇心旺盛な人はもしかしたら見つけているかもしれない。
 プロジェクト内、"gen"フォルダーの中にある"R.java"が正体である。
 こいつは例えばレイアウトファイル内に"button01"というボタンのIDが設定された時に、
 自動でプログラムから呼び出せるように紐付けを行ってくれるという素敵な機能を持っている。
 他の例を挙げるならば、"drawable"フォルダーに入れた"***.png"という画像をプログラム側で
 R.drawable.***と書けば呼び出せるようになるのもR.javaのおかげ。
 基本的に裏でいろいろやってくれる縁の下の力持ちだが、プログラマー側で余計なことをすると
 一瞬でパーになったりするので気を付けて扱おう。センシティブ。
最終更新:2013年08月06日 12:28