我想用随机颜色的每一次触摸绘制一个圆圈。我可以这样做,但每当我触摸屏幕绘制另一个圆圈时,前面的圆圈会将其颜色更改为相同的圆圈。我想要画圆圈来保存它们的颜色。我怎样才能做到这一点 ?
这是我的代码:( MainActivity与生成的相同,所以我不把它放在这里)
public class Pointer {
PointF f;
int color;
public Pointer(PointF f, int color){
this.f = f;
this.color=color;
}
}
和MyView:
public class MyView extends View {
Random random = new Random();
PointF f;
public int colors[] = {Color.GREEN, Color.BLACK, Color.BLUE,
Color.MAGENTA, Color.DKGRAY, Color.RED,
Color.CYAN, Color.YELLOW};
private static final int SIZE = 80;
Paint paint;
private ArrayList<Pointer> activePointers;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
activePointers = new ArrayList<Pointer>();
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int ptrIndex = event.getActionIndex();
int ptrID = event.getPointerId(ptrIndex);
int maskedAction = event.getActionMasked();
f = new PointF();
switch (maskedAction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN: {
int color;
color = random.nextInt(colors.length);
paint.setColor(colors[color]);
Pointer pointer = new Pointer(f, color);
pointer.f.x = event.getX(ptrIndex);
pointer.f.y = event.getY(ptrIndex);
activePointers.add(ptrID, pointer);
}
break;
case MotionEvent.ACTION_MOVE:
for (int i = 0; i < event.getPointerCount(); i++) {
Pointer pointer = activePointers.get(event.getPointerId(i));
if (pointer != null) {
pointer.f.x = event.getX(i);
pointer.f.y = event.getY(i);
}
}
break;
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int i = 0; i < activePointers.size(); i++) {
Pointer pointer = activePointers.get(i);
if (pointer != null) {
canvas.drawCircle(pointer.f.x, pointer.f.y, SIZE, paint);
}
}
}
}