Android绘图学习 - 手写板

效果图:


View代码:activity里设置显示该view即可

package com.tszy.view;

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

/**
 * 双缓冲区绘图demo 手写板
 * 
 * @author JianbinZhu
 * 
 */
public class View7 extends View {
	private Paint paint;
	private Canvas cacheCanvas;
	private Bitmap cachebBitmap;
	private Path path;

	public View7(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		paint = new Paint();
		paint.setAntiAlias(true);
		paint.setStrokeWidth(3);
		paint.setStyle(Paint.Style.STROKE);
		paint.setColor(Color.CYAN);

		path = new Path();
		cachebBitmap = Bitmap.createBitmap(480, 320, Config.ARGB_8888);
		cacheCanvas = new Canvas(cachebBitmap);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		canvas.drawColor(Color.BLACK);

		//绘制上一次的,否则不连贯
		canvas.drawBitmap(cachebBitmap, 0, 0, null);
		canvas.drawPath(path, paint);
	}

	private float cur_x, cur_y;
	private boolean isMoving;
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		float x = event.getX();
		float y = event.getY();

		switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN : {
				cur_x = x;
				cur_y = y;
				path.moveTo(cur_x, cur_y);
				isMoving = true;
				break;
			}

			case MotionEvent.ACTION_MOVE : {
				// 二次曲线方式绘制
				path.quadTo(cur_x, cur_y, x, y);
				// 下面这个方法貌似跟上面一样
				// path.lineTo(x, y);
				cur_x = x;
				cur_y = y;
				break;
			}

			case MotionEvent.ACTION_UP : {
				// 鼠标弹起保存最后状态
				cacheCanvas.drawPath(path, paint);
				path.reset();
				isMoving = false;
				break;
			}
		}

		// 刷新界面
		invalidate();

		return true;
	}
}


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值