項(xiàng)目突然用到涂鴉的功能伺帘,網(wǎng)上的Demo背景都是空白的昭躺,還有好多BUG,就自己搞了一個(gè)伪嫁,好了不多說(shuō)了领炫,進(jìn)入正題,所謂涂鴉就是利用安卓的繪畫(huà)功能在畫(huà)布上進(jìn)行操作,直接上代碼吧
/**
*初始化組件
*/
private void init() {
mPaint=newPaint();
mPaint.setAntiAlias(true);//去除鋸齒
mPaint.setStrokeWidth(5);//默認(rèn)畫(huà)筆粗細(xì)
mPaint.setStyle(Paint.Style.STROKE);//這只畫(huà)筆的風(fēng)格為空心的
mPaint.setColor(Color.BLACK);//設(shè)置畫(huà)筆的默認(rèn)顏色
mPath=newPath();
//穿件一個(gè)空白的畫(huà)板背景
mBitmap= Bitmap.createBitmap(screenWidth,screenHeight, Bitmap.Config.ARGB_8888);
Log.i("gaodu",screenHeight+"a");
mCanvas=newCanvas(mBitmap);
mCanvas.drawColor(bg);//設(shè)置畫(huà)板背景的顏色张咳,默認(rèn)為白色
}
創(chuàng)建畫(huà)布背景所需的Bitmap后需要給他drawColor否則得到的圖片是透明的
然后就是
@Override
protected voidonDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap,0,0,null);
canvas.drawPath(mPath,mPaint);
}
此處不做過(guò)多的描述帝洪,應(yīng)該都懂;
以下是最重要的一點(diǎn),通過(guò)onTouchEvent方法劃線
@Override
public booleanonTouchEvent(MotionEvent event) {
floatx = event.getX();//得到點(diǎn)擊的位置相對(duì)于該組件左上角的位置的X坐標(biāo)
floaty = event.getY();//得到點(diǎn)擊的位置相對(duì)于該組件左上角的位置的Y坐標(biāo)
switch(event.getAction()) {
caseMotionEvent.ACTION_DOWN:
currentX= x;
currentY= y;
mPath.moveTo(currentX,currentY);//設(shè)置畫(huà)筆的位置
break;
caseMotionEvent.ACTION_MOVE:
currentX= x;
currentY= y;
mPath.quadTo(currentX,currentY, x, y);//畫(huà)線
break;
caseMotionEvent.ACTION_UP:
mCanvas.drawPath(mPath,mPaint);
Log.i("高度", y +" c");
break;
}
invalidate();
return true;
}
畫(huà)完后就剩下取得畫(huà)板上面的圖片了脚猾,往下看:
//縮放生成圖片
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;
}
截取圖像需要特別注意葱峡,需要用坐標(biāo)截取龙助;
然后需要清除功能的不要錯(cuò)過(guò):
if(mCanvas!=null) {
mPath.reset();
mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
mCanvas.drawColor(bg);
invalidate();
}
OK族沃,準(zhǔn)備搞定了,接下來(lái)調(diào)用它吧:
mPaintView=newTuYaView(this, screenWidth, screenHeight);
mPaintView.setPaintColor(Color.BLACK);
mPaintView.setPaintSize(20);
mPaintView.setBackGround(Color.WHITE);
mFrameLayout.addView(mPaintView);
mPaintView.requestFocus();
好了泌参,完了,希望對(duì)大家有幫助常空,寫(xiě)的不好多多包涵沽一。。漓糙。