【发布时间】:2014-04-28 18:11:47
【问题描述】:
我最近一直在开发一款适用于 Android 的绘图应用程序,但现在遇到了一个我无法解决的问题。 这个想法是能够在两个绘图层上绘图。切换到第 2 层时,您只能看到该层的图纸,而在第 1 层中,您可以看到两个层,而第 2 层稍微透明。
为此,我有两个列表来保存绘制的路径和绘画。
case MotionEvent.ACTION_DOWN:
//save a path to the list
Paint strokePaint=new Paint();
Path strokePath=new Path();
setupDrawingPaint(strokePaint); //some initialization
stroke = new Stroke(strokePath, strokePaint); //object to save the paths
stroke.movePath(touchX, touchY);
if(drawingLayer==1){
strokeListL1.add(stroke);
}
else{
strokeListL2.add(stroke);
}
//draw the path
drawingPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
stroke.linePath(touchX, touchY);
drawingPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
canvas.drawPath(drawingPath, drawingPaint);
drawingPath.reset()
break;
invalidate();
现在在 onDraw() 方法中,路径正常绘制,除非图层被更改,然后从列表中绘制笔划对象。
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
//draw the layer(s)
if(layerChanged)
{
if(drawingLayer==1){
for(Stroke stroke : strokeListL1)
canvas.drawPath(stroke.getPath(), stroke.getPaint());
for(Stroke stroke : strokeListL2){
Paint paint = stroke.getPaint();
paint.setAlpha(50);
canvas.drawPath(stroke.getPath(), paint);
}
}
else{
for(Stroke stroke : strokeListL2){
Paint paint = stroke.getPaint();
paint.setAlpha(255);
canvas.drawPath(stroke.getPath(), paint);
}
}
}
else
canvas.drawPath(drawingPath, drawingPaint);
layerChanged=false;
从这里开始问题。只要我不更改图层擦除工作正常,但只要我更改图层而不是擦除它只会清除整个画布。 擦除方法如下所示:
public void setErase(boolean erase){
eraseMode=erase;
if(eraseMode)
drawingPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
else
drawingPaint.setXfermode(null);
}
如果我在更改图层之前进行一些擦除,一旦我更改回该图层,“擦除笔触”也会以颜色绘制。我不确定我是否把自己逼入了死胡同,或者我只是没有得到它。希望大家帮帮我。
到目前为止
【问题讨论】:
标签: android path drawing erase