Android触摸:绘制的圆圈在触摸时会改变颜色

时间:2016-03-24 06:59:41

标签: android touch drawing android-view multi-touch

我想用随机颜色的每一次触摸绘制一个圆圈。我可以这样做,但每当我触摸屏幕绘制另一个圆圈时,前面的圆圈会将其颜色更改为相同的圆圈。我想要画圆圈来保存它们的颜色。我怎样才能做到这一点 ?

这是我的代码:( 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);
        }
    }
}

}

0 个答案:

没有答案