たぼさんの部屋

いちょぼとのんびり

T101 PaintをBitmapで

f:id:donsuka_kk:20121204170413p:plain

PaintView.java

package com.example.t101_penview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class PenView extends View {
	private float oldx = 0f;
	private float oldy = 0f;
	private Bitmap bmp = null;
	private Canvas bmpCanvas;
	private Paint paint;

	public PenView(Context context) {
		super(context);
		//paint
		paint = new Paint();
		paint.setColor(Color.BLUE);
		paint.setAntiAlias(true);
		paint.setStyle(Paint.Style.STROKE);
		paint.setStrokeWidth(2);
		paint.setStrokeCap(Paint.Cap.ROUND);
		paint.setStrokeJoin(Paint.Join.ROUND);
	}

	/*
	 * (non-Javadoc)
	 * onSizeChangedは表示されるタイミングで呼び出され、
	 * viewの表示領域の値を取得できるので、この関数で、viewを設定します。
	 * 
	 * @see android.view.View#onSizeChanged(int, int, int, int)
	 */
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
		bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
		bmpCanvas = new Canvas(bmp);
	}

	public void onDraw(Canvas canvas) {
		canvas.drawBitmap(bmp, 0, 0, null);
	}

	public boolean onTouchEvent(MotionEvent e) {
		switch (e.getAction()) {
		case MotionEvent.ACTION_DOWN: // 最初のポイント
			oldx = e.getX();
			oldy = e.getY();
			break;
		case MotionEvent.ACTION_MOVE: // 途中のポイント
			bmpCanvas.drawLine(oldx, oldy, e.getX(), e.getY(), paint);
			oldx = e.getX();
			oldy = e.getY();
			invalidate();
			break;
		default:
			break;
		}
		return true;
	}

}

Main.java

package com.example.t101_penview;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.LinearLayout;

public class Main extends Activity {
	Context context;
	LinearLayout base;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		context = getApplicationContext();
		base = new LinearLayout(context);
		
		base.setOrientation(LinearLayout.VERTICAL);
		setContentView(base);
		
		PenView penview = new PenView(context);
		base.addView(penview);
		
	}

}