【发布时间】:2021-11-04 08:50:36
【问题描述】:
所以我目前正在构建儿童着色书应用程序。我想限制绘图区域,所以它只能在选定区域中绘制路径。例如,如果我触摸喇叭,那么绘制区域只是喇叭边框内的空间。目前,我只能在位图中绘制路径(绘制区域不受限制)。
第一张图片:触摸区域。
第二张图:用户只能在蓝色空间内绘制路径。
现在,这是我的 onDraw 代码:
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmapCanvas, 0f, 0f, paintCanvas);
canvas.drawPath(mPaths, drawPaint);
}
触摸:
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float x = motionEvent.getX();
float y = motionEvent.getY();
if (isEditable){
switch (motionEvent.getAction()) {
case 0:
if (paths.isEmpty()) {
mBitmap = Bitmap.createBitmap(mBitmapCanvas);
paths.add(mBitmap);
}
mPaths.reset();
setColor(ShaderInt);
mPaths.moveTo(x, y);
mX = x;
mY = y;
invalidate();
break;
case 1:
mPaths.lineTo(mX, mY);
mCanvas.drawPath(mPaths, drawPaint);
mCanvas.drawPath(mPaths, drawPaint);
mBitmap = Bitmap.createBitmap(mBitmapCanvas);
paths.add(mBitmap);
mPaths.reset();
invalidate();
break;
case 2:
float abs = Math.abs(x - this.mX);
float abs2 = Math.abs(y - this.mY);
if (abs >= TOUCH_TOLERANCE || abs2 >= TOUCH_TOLERANCE) {
this.mPaths.quadTo(this.mX, this.mY, (this.mX + x) / 2.0f, (this.mY + y) / 2.0f);
this.mX = x;
this.mY = y;
}
invalidate();
break;
default:
return false;
}
} else {
return false;
}
invalidate();
return true;
}
有什么方法可以使绘制区域限制在触摸/选定区域?任何帮助将不胜感激,谢谢!
【问题讨论】:
标签: java android canvas graphics drawing