Как нарисовать новое изображение каждый раз, когда экран касается холста? - PullRequest
0 голосов
/ 21 мая 2019

я впервые использую canvas в моем проекте android.Моя цель - создать приложение, которое может получать координаты точки при каждом касании экрана.я уже сделал с добавлением нескольких точек каждое прикосновение и линия между точкой.но дело только в canvas.drawCircle.Я хочу изменить внешний вид моей точки с моим рисованным XML.возможно ли это сделать?

открытый класс PaintView расширяет View {

float mX;
float mY;
TextView mTVCoordinates;
private Paint paint = new Paint();
List<Point> points = new ArrayList<Point>();
private Path path = new Path();

Context context;
float ratioX, ratioY;

public PaintView(Context context) {
    super(context);
    this.context = context;

}

public PaintView(Context context, AttributeSet attributeSet) {
    super(context, attributeSet);

}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    paint.setColor(getResources().getColor(R.color.blue));
    paint.setStrokeWidth(4);
    paint.setAntiAlias(true);

    for (Point p : points) {
        canvas.drawCircle(p.x, p.y, 15, paint);

    }

    if (points.size() > 1) {
        for (int i = 1; i < points.size(); i++) {
            int size = i;
            canvas.drawLine(points.get(size - 1).x, points.get(size - 1).y, points.get(size).x, points.get(size).y, paint);
        }

    }

    invalidate();
}

public void setTextView(TextView tv) {
    // Reference to TextView Object
    mTVCoordinates = tv;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            if (points.size() < 7) {
                Point p = new Point();
                p.x = (int) event.getX();
                p.y = (int) event.getY();
                points.add(p);
                invalidate();
                if (mTVCoordinates != null) {
                    float x = mX * ratioX;
                    float y = mY * ratioY;
                    mTVCoordinates.setText("X :" + points.get(points.size() - 1).x + " , " + "Y :" + points.get(points.size() - 1).y + " count: " + points.size());
                }
            } else {
                points.clear();
                path.reset();
                invalidate();
            }

        case MotionEvent.ACTION_MOVE:  // a pointer was moved
            final float x = event.getX();
            final float y = event.getY();

        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL: {
            break;
        }
    }
    invalidate();
    return true;

}

public PointF getPoints() {

    return new PointF(mX, mY);
}

public void setRatio(float ratiox, float ratioy) {
    ratioX = ratiox;
    ratioY = ratioy;
}

}

, и моя следующая цель - сделать так, чтобы каждая точка могла двигаться, когда я ее ударил.как это сделать?спасибо

...