タッチイベントを使って、頑張ればお絵描きもできるプログラムを作ってみた。ただ、ビットマップを用意して、タッチされたところを塗りつぶしてCanvasにビットマップを描画するだけ。Viewを継承したクラスのコンストラクタが呼ばれた段階では、幅や高さがわからないので描画時に1度だけ初期化するようにした。しかし、初期化用のメソッドがありそう、あとで調べてみる。
package draw.picture; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; import android.view.MotionEvent; public class PictureView extends View{ private Bitmap bitmap; public PictureView(Context context){ super(context); bitmap = null; setBackgroundColor(Color.WHITE); setFocusable(true); } public void initBitmap(){ bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); } @Override public void onDraw(Canvas canvas){ if(bitmap == null){ initBitmap(); } canvas.drawBitmap(bitmap, 0, 0, new Paint()); } @Override public boolean onTouchEvent(MotionEvent event){ int x = (int)event.getX(); int y = (int)event.getY(); drawRect(x, y, 16); invalidate(); return true; } private void drawRect(int x, int y, int size){ int half = size / 2; x = x < half ? 0 : x - half; y = y < half ? 0 : y - half; x = x + size > getWidth() ? getWidth() - size : x; y = y + size > getHeight() ? getHeight() - size : y; for(int cy = y; cy < y + size; cy++){ for(int cx = x; cx < x + size; cx++){ bitmap.setPixel(cx, cy, 0xFF0000FF); } } } }