在我的Draw Activity类中,当选择了微调器中的项目时,画笔大小会发生变化。但是它也改变了先前绘制的路径的大小。我试图为微调器的每个选择创建一个新的绘画对象,但仍然无法工作。这里tv是具有draw方法的eventTouchView类的一个实例。不知道什么是错的: 在我的抽奖活动类:Android画布/ Paint - 更改Android画布笔刷的刷子尺寸
@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;
}
按照sdk中的fingerpaint示例 – Raghunandan
谢谢! youtube中的fingerpaint示例? – user37375
下的android-sdk/samples – Raghunandan