android 涂鸦功能

项目突然用到涂鸦的功能,网上的Demo背景都是空白的,还有好多BUG,就自己搞了一个,好了不多说了,进入正题,所谓涂鸦就是利用安卓的绘画功能在画布上进行操作,直接上代码吧

/**

*初始化组件

*/

private void init() {

mPaint=newPaint();

mPaint.setAntiAlias(true);//去除锯齿

mPaint.setStrokeWidth(5);//默认画笔粗细

mPaint.setStyle(Paint.Style.STROKE);//这只画笔的风格为空心的

mPaint.setColor(Color.BLACK);//设置画笔的默认颜色

mPath=newPath();

//穿件一个空白的画板背景

mBitmap= Bitmap.createBitmap(screenWidth,screenHeight, Bitmap.Config.ARGB_8888);

Log.i("gaodu",screenHeight+"a");

mCanvas=newCanvas(mBitmap);

mCanvas.drawColor(bg);//设置画板背景的颜色,默认为白色

}

创建画布背景所需的Bitmap后需要给他drawColor否则得到的图片是透明的

然后就是

@Override

protected voidonDraw(Canvas canvas) {

canvas.drawBitmap(mBitmap,0,0,null);

canvas.drawPath(mPath,mPaint);

}

此处不做过多的描述,应该都懂;

以下是最重要的一点,通过onTouchEvent方法划线

@Override

public booleanonTouchEvent(MotionEvent event) {

floatx = event.getX();//得到点击的位置相对于该组件左上角的位置的X坐标

floaty = event.getY();//得到点击的位置相对于该组件左上角的位置的Y坐标

switch(event.getAction()) {

caseMotionEvent.ACTION_DOWN:

currentX= x;

currentY= y;

mPath.moveTo(currentX,currentY);//设置画笔的位置

break;

caseMotionEvent.ACTION_MOVE:

currentX= x;

currentY= y;

mPath.quadTo(currentX,currentY, x, y);//画线

break;

caseMotionEvent.ACTION_UP:

mCanvas.drawPath(mPath,mPaint);

Log.i("高度", y +" c");

break;

}

invalidate();

return true;

}

画完后就剩下取得画板上面的图片了,往下看:

//缩放生成图片

publicBitmap resizeImage(Bitmap bitmap,intwidth,intheight) {

intoriginWidth = bitmap.getWidth();

intoriginHeight = bitmap.getHeight();

floatscaleWidth = ((float) width) / originWidth;

floatscaleHeight = ((float) height) / originHeight;

Matrix matrix =newMatrix();

matrix.postScale(scaleWidth, scaleHeight);

Bitmap resizedBitmap = Bitmap.createBitmap(bitmap,0,0,screenWidth,

getBottom() - getTop(), matrix,true);//截取图像

returnresizedBitmap;

}

截取图像需要特别注意,需要用坐标截取;

然后需要清除功能的不要错过:

if(mCanvas!=null) {

mPath.reset();

mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

mCanvas.drawColor(bg);

invalidate();

}


OK,准备搞定了,接下来调用它吧:

mPaintView=newTuYaView(this, screenWidth, screenHeight);

mPaintView.setPaintColor(Color.BLACK);

mPaintView.setPaintSize(20);

mPaintView.setBackGround(Color.WHITE);

mFrameLayout.addView(mPaintView);

mPaintView.requestFocus();

好了,完了,希望对大家有帮助,写的不好多多包涵。。。

你可能感兴趣的:(android 涂鸦功能)