在我的“绘制活动”类中,当选择了微调器中的项目时,我的画笔大小会发生变化。但是它也会改变先前绘制的路径的大小。我试图为微调器中的每个选择创建一个新的绘制对象,但仍然不起作用。这里tv是eventTouchView类的一个实例,它有draw方法。不确定是什么问题: 在我的Draw Activity类中:
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
tv.paint= new Paint();
tv.paint.setStyle(Paint.Style.STROKE);
tv.paint.setStrokeJoin(Paint.Join.ROUND);
if ( arg0.getSelectedItem().equals("10f")){
tv.paint.setStrokeWidth(10f);
}
else if ( arg0.getSelectedItem().equals("20f")){
tv.paint.setStrokeWidth(20f);
}
else if ( arg0.getSelectedItem().equals("40f")){
tv.paint.setStrokeWidth(40f);
}
else if ( arg0.getSelectedItem().equals("50f")){
tv.paint.setStrokeWidth(50f);
}
else {
tv.paint.setStrokeWidth(30f);
}
}
在我的ViewTouchEvent类中:
public class ViewTouchEvent extends View{
Paint paint;
Path path = new Path();
protected void onDraw(Canvas canvas){
pathToGrayscale();
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(grayscaleBmp, 0, 100, null);
canvas.drawPath(path, paint);
canvas.drawPath(cursor, cursorPaint);
}
新版本:我尝试了以下步骤,但不确定下面的代码有什么问题 -
@SuppressLint("DrawAllocation")
protected void onDraw(Canvas canvas){
pathToGrayscale();
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(grayscaleBmp, 0, 100, null);
for (int i =0; i < drawings.size(); i++){
canvas.drawPath(drawings.get(i).getPath(), drawings.get(0).getPaint());
}
//canvas.drawPath(path, paint);
canvas.drawPath(cursor, cursorPaint);
}
public boolean onTouchEvent(MotionEvent event){
float Xpos = event.getX();
float Ypos = event.getY();
//drawings = new Vector<Drawing>();
if (selection == 10){
Drawing draw1 = new Drawing();
draw1.getPaint().setStrokeWidth(10f);
draw1.getPaint().setStyle(Paint.Style.STROKE);
draw1.getPaint().setStrokeJoin(Paint.Join.ROUND);
drawings.add(draw1);
}
else if (selection == 20){
Drawing draw2 = new Drawing();
draw2.getPaint().setStrokeWidth(20f);
draw2.getPaint().setStyle(Paint.Style.STROKE);
draw2.getPaint().setStrokeJoin(Paint.Join.ROUND);
drawings.add(draw2);
}
else if (selection == 30){
Drawing draw3 = new Drawing();
draw3.getPaint().setStrokeWidth(30f);
draw3.getPaint().setStyle(Paint.Style.STROKE);
draw3.getPaint().setStrokeJoin(Paint.Join.ROUND);
drawings.add(draw3);
}
else if (selection == 40){
Drawing draw4 = new Drawing();
draw4.getPaint().setStrokeWidth(40f);
draw4.getPaint().setStyle(Paint.Style.STROKE);
draw4.getPaint().setStrokeJoin(Paint.Join.ROUND);
drawings.add(draw4);
}
else if (selection == 50){
Drawing draw5 = new Drawing();
draw5.getPaint().setStrokeWidth(50f);
draw5.getPaint().setStyle(Paint.Style.STROKE);
draw5.getPaint().setStrokeJoin(Paint.Join.ROUND);
drawings.add(draw5);
}
else{
Drawing draw6 = new Drawing();
draw6.getPaint().setStrokeWidth(70f);
draw6.getPaint().setStyle(Paint.Style.STROKE);
draw6.getPaint().setStrokeJoin(Paint.Join.ROUND);
drawings.add(draw6);
}
//ArrayList <Pair<Float, Float>> pathPixels = new ArrayList <Pair<Float, Float>>();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
drawings.get(drawings.size()-1).getPath().moveTo(Xpos, Ypos);
xPathPixels.add(Xpos);
yPathPixels.add(Ypos);
//int grayPixel = grayBmp.getPixel(Math.round(Xpos), Math.round(Ypos));
//resizedBmp.setPixel(Math.round(event.getX()), Math.round(event.getY()), grayPixel);
return true;
case MotionEvent.ACTION_MOVE:
drawings.get(drawings.size()-1).getPath().lineTo(Xpos, Ypos);
xPathPixels.add(Xpos);
yPathPixels.add(Ypos);
//pathToGrayscale();
//int grayPixel2 = grayBmp.getPixel(Math.round(Xpos), Math.round(Ypos));
//resizedBmp.setPixel(Math.round(event.getX()), Math.round(event.getY()), grayPixel2);
cursor.reset();
cursor.addCircle(Xpos, Ypos, 30, Path.Direction.CW);
break;
case MotionEvent.ACTION_UP:
//pathToGrayscale();
System.out.println("xPath : " + xPathPixels + " " + "yPath : " + yPathPixels);
cursor.reset();
break;
default:
return false;
}
invalidate();
return true;
}
答案 0 :(得分:0)
您需要进行一些更改 -
(1。)在项目中创建一个模型类,让它说“绘图”包含Paint和Path实例
class Drawing {
Paint paint;
Path path;
//Getter & Setter
}
(2。)在ViewTouchEvent类中创建一个Drawing类型列表。
Vector<Drawing> drawings = new Vector<Drawing>();
(3。)捕获onTouchEvent()并使用相应的Path和paint实例创建Drawing对象。 (4.)这里每个绘图都有自己的绘画属性,并不常见。
(5。)现在,将此绘图实例添加到drawingList。
(6。)调用invalidate(),这将立即调用onDraw。
(7。)这里你应该迭代列表并为每个绘图实例调用getPath()和getPaint() 您可以使用特定的绘画和路径对象绘制所有绘图。
注意:您还必须维护一个当前图形,以便可视化当前绘制的路径。