イメージリソースの表示
更に複雑なグラフィックを表示させたい場合には、あらかじめビットマップイメージファイルをリソースに用意し、これをロードして描画させる、というやり方をとります。これも実際にやってみましょう。
まず、イメージファイルを作成します。androidでは、JPEG、PNG、GIFといったイメージを利用することができます。ここでは「image.jpg」というJPEGイメージファイルを作成することにしましょう。
イメージは、「res」内の「drawable」というフォルダの中にコピーしておきます。ここには、既に「icon.png」というアイコンのイメージが用意されていますね。描画に関するイメージは、ここにまとめておくのが基本です。
では、このイメージを実際に画面に描画してみましょう。
public class MyAndy extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DrawView view = new DrawView(getApplication());
setContentView(view);
}
}
class DrawView extends View {
private Bitmap img;
public DrawView(Context context) {
super(context);
Resources res = this.getContext().getResources();
img = BitmapFactory.decodeResource(res, R.drawable.image);
}
public void onDraw(Canvas c){
c.drawColor(Color.BLACK);
Paint fill_paint = new Paint();
c.drawBitmap(img, 50, 50, fill_paint);
}
}
イメージリソースの描画例。 |
ここでは、「Bitmap」というフィールドを用意していますね。これが、ビットマップイメージのクラスになります。
Resources res = this.getContext().getResources();
まず、リソースを扱うためのクラス「Resources」を用意します。これはActivityクラスのgetContextで得られるContextクラスに用意されている「getResources」を使います。
img = BitmapFactory.decodeResource(res, R.drawable.image);
続いて、BitmapFactoryというクラスにある「decodeResource」メソッドを呼び出します。これは、指定されたリソースを読み込み、Bitmapオブジェクトに変換して返すものです。引数には、Resourcesインスタンスと、読み込むイメージの番号を指定します。番号Dは、例によってRクラスのdrawableから取り出します。ここに、image.jpgの番号が自動生成されているはずです(drawableには、「drawable」フォルダに入れてあるファイル名のフィールドが自動的に用意されます)。
これでリソースからイメージデータを取り出し、Bitmapとして取得するところまでできました。後は、onDraw内でこれを描画するだけです。
c.drawBitmap(img, 50, 50, fill_paint);
「drawBitmap」が、そのためのメソッドです。これは引数にBitmapインスタンス、描画する横・縦位置、Paintインスタンスをそれぞれ渡します。横・縦位置の代りに、RectFを渡すことで、指定した領域内にイメージを描画させることなども可能です。
さあ、これで主なグラフィックの描画はだいたいできるようになりました。それぞれで実際に図形を描くサンプルをいろいろと動かして、グラフィックの基本をしっかり理解しておきましょう。