`
ipjmc
  • 浏览: 702749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android实现一个简单的画板

阅读更多
思路:
        自定义CustomView,重写onTouch(),和onDraw()。在onTouch中识别触屏事件,并记录触屏发生的位置。为了在ACTION_DOWN发生后能够接收到后续的触屏事件,我们需要让onTouch()返回true。
        在onDraw()中,将上一次触屏的Point和这一次触屏发生的Point,连成一条直线。因为invalidate()后,canvas被清空了,我们需要用mBitmap保存每一次绘画的结果。




package com.ipjmc.hello;

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

public class CustomView extends View {

	private int mLastX, mLastY; //上次触屏的位置
	private int mCurrX, mCurrY; //当前触屏的位置
	
	private Bitmap mBitmap;  //保存每次绘画的结果
	private Paint mPaint;
	
	public CustomView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mPaint = new Paint();
		mPaint.setStrokeWidth(6);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		
		int width = getWidth();
		int height = getHeight();
		
		if (mBitmap == null) {
			mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
		}
		
//先将结果画到Bitmap上
		Canvas tmpCanvas = new Canvas(mBitmap);
		tmpCanvas.drawLine(mLastX, mLastY, mCurrX, mCurrY, mPaint);

//再把Bitmap画到canvas上
		canvas.drawBitmap(mBitmap, 0, 0, mPaint);
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		
		mLastX = mCurrX;
		mLastY = mCurrY;
		mCurrX = (int) event.getX();
		mCurrY = (int) event.getY();
		
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			mLastX = mCurrX;
			mLastY = mCurrY;
			break;
		default:
			break;
		}
		
		invalidate();

		return true; //必须返回true
	}
}

  • 大小: 4.5 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics