如何绘制多线,不同的颜色和撤消,重做机器人的路径?
我要画上不同颜色的观点多行和撤消,重做机器人的路径。
I want to draw multiple lines on the view with different colors and undo,redo the paths in android.
我使用位图漆的选择,每个通道都有一个唯一的颜色,但撤消,重做不工作。
i use the bitmap paint option, each paths has a unique color but undo,redo is not working..
下面是我的$ C $ bitmappaint的C:
Here is my code of bitmappaint:
public MyView(Context context, Object object) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
mPath = new Path();
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(0xFFFFFF00);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(3);
mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
}
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
for (Path p : paths)
{
canvas.drawPath(p, mPaint);
}
canvas.drawPath(mPath, mPaint);
}
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
int action = event.getAction();
int action1=event.getAction();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
undonePaths.clear();
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
startPoint = new PointF(event.getX(), event.getY());
endPoint = new PointF();
invalidate();
// isDrawing = true;
break;
case MotionEvent.ACTION_MOVE:
float dx = Math.abs(x - mX);
System.out.println("action move");
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE)
{
// currentDrawingPath.path.quadTo(mX,mY,(x + mX)/2, (y + mY)/2);
}
mX = x;
mY = y;
endPoint.x = event.getX();
endPoint.y = event.getY();
isDrawing = true;
invalidate();
break;
case MotionEvent.ACTION_UP:
mPath.lineTo(mX, mY);
paths.add(mPath);
mPath = new Path();
// mCanvas.drawPath(mPath, ppaint);
endPoint.x = event.getX();
endPoint.y = event.getY();
isDrawing = false;
invalidate();
break;
default:
break;
}
}
![bitmappaint画布输出] [1] [1]: http://i.stack.imgur.com/9aQvE.png
![output of bitmappaint canvas][1] [1]: http://i.stack.imgur.com/9aQvE.png
不使用位图我所面临的色差问题,如果我选择一个蓝色的路径是指所有的previous路径将变为蓝色;
without bitmap using i faced the color problem if i select a blue color for a path means all the previous paths will be changed to blue color;
下面是我的code
protected void onDraw(Canvas canvas)
{
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
for (Path p : paths)
{
canvas.drawPath(p, mPaint);
}
canvas.drawPath(mPath, mPaint);
}
![而不使用Canvas绘图位图输出] [2] [2]: http://i.stack.imgur.com/eDp5Y.png
![output of without bitmap using canvas drawing][2] [2]: http://i.stack.imgur.com/eDp5Y.png
请帮我打水的不同颜色的android系统中唯一的路径有多条路径。 谢谢advancde ........
pls help me to draw multiple paths with different color of unique paths in android. Thanks in advancde........
在处理MotionEvent.ACTION_UP:你需要保存用于绘制路径像这样的颜色:
When you handle the MotionEvent.ACTION_UP : you need to save the color used to draw the path with something like this :
case MotionEvent.ACTION_UP:
paths.add(mPath);
colorsMap.put(mPath,selectedColor); // store the color of mPath
...
绘制路径之前,您需要设置的油漆颜色:
Before drawing a path, you need to set the paint color:
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
for (Path p : paths)
{
mPaint.setColor(colorsMap.get(p));
canvas.drawPath(p, mPaint);
}
mPaint.setColor(selectedColor);
canvas.drawPath(mPath, mPaint);
}
而colorsMap是一个简单的实例变量:
And the colorsMap is a simple instance variable:
private Map<Path, Integer> colorsMap = new HashMap<Path, Integer>();
要实现撤销/重做功能,你只需要删除的路径的最后一个元素(并将其存储在一个undoneList,这样就重做可以恢复)。看到的Android帆布重做和撤消操作
To implement the Undo/Redo feature, you just have to remove the last element from paths (and store it in a undoneList so that on redo can restore it). see Android Canvas Redo and Undo Operation