ImageButtonを作る

Androidのサンプルにはボタンとかボタンとかボタンを使ったものがたくさんあって。そうするとボタンを使いたくなるわけで。
サンプルを見ると大体のはレイアウトファイル(./res/layout/の中に入ってるファイル。勝手に呼んでみた)
にボタンの幅なり高さなりの情報が記述されててそれを呼び出す感じで使ってる。


ImageButtonなんかは画像が表示できるんだけど、あらかじめ記述しちゃうとその画像を変更できない。
でも決められた枠にははめられたくない場合もある。そこで今回のソース。
ImageButtonをプログラム内で生成し、ボタンをクリックするごとにクールなキャラクタが大きくなったり小さくなったりします。


あとはこのボタンの位置を変えたいんだけどどうすればいいのか。


ちなみにレイアウトファイルからボタンを呼び出すことはできるんだけどそこにイメージを描画したりはできないみたい。
リソースファイルの扱いが色々いじりがいがあるのでその辺りのことをまた何か書こう。


以下動作画面です。
http://gyazo.com/e6b14a7607166d9b0848d0812a81b9c3.png
http://gyazo.com/0a202f476df3399969ca876504ad918d.png

package net.swelt.android.layouttest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import android.content.Resources;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.*;

public class LayoutTest extends Activity {
	private boolean mFlag = false;
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        
        final Bitmap bm1 = loadImage(R.drawable.kirby, 96, 96);
        final Bitmap bm2 = loadImage(R.drawable.kirby, 32, 32);

        ImageButton im = new ImageButton(this);
        addContentView(im, new LayoutParams(100, 100));
        
        im.setImageBitmap(bm1);
        im.setOnClickListener(new View.OnClickListener() {
        	public void onClick(View v) {
        		((ImageButton) v).setImageBitmap(mFlag ? bm1 : bm2);
        		mFlag = !mFlag;
        	}
        });
    }
    
	private Bitmap loadImage(int fileid, int width, int height) {
		Resources r = this.getResources();
		Bitmap bitmap = Bitmap.createBitmap(width, height, true);
		Drawable drawable = r.getDrawable(fileid);
		Canvas canvas = new Canvas(bitmap);
		
		drawable.setBounds(0, 0, width, height);
		drawable.draw(canvas);
		
		return bitmap;
	}
}