я впервые использую 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;
}
}
, и моя следующая цель - сделать так, чтобы каждая точка могла двигаться, когда я ее ударил.как это сделать?спасибо