六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 100|回复: 0

Android实现一个简单的画板

[复制链接]

升级  96.67%

57

主题

57

主题

57

主题

秀才

Rank: 2

积分
195
 楼主| 发表于 2013-1-30 04:08:06 | 显示全部楼层 |阅读模式
思路:
        自定义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);}@Overrideprotected 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);}@Overridepublic 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}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表