项目突然用到涂鸦的功能,网上的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();
好了,完了,希望对大家有帮助,写的不好多多包涵。。。