Проблема: Этот код блока делает ваше приложение неработающим.
@Override
public void onClick(View v) {
Button add = findViewById(R.id.addBtn);
//if (v==add) {
Canvas canvas=new Canvas();
canvas.drawCircle(50,50,50,mPointPaint);
invalidate();
Toast.makeText(getContext(), "Add button clicked!!",
Toast.LENGTH_LONG).show();
//}
}
Вы создаете новый холст и рисуете на нем вместо холста текущего представления.
Решение: Вы можете выполнить следующие шаги
Шаг 1: Определить класс Circle внутри пользовательского класса представления.
public class LineGraphView extends View implements View.OnClickListener {
...
class Circle {
float cx;
float cy;
float radius;
}
Circle mCircle;
...
}
Шаг 2: Изменить onDraw () метод
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//X Axis
canvas.drawLine(50, dpToPx(190), dpToPx(400), dpToPx(190), mAxisPaint);
//Y Axis
canvas.drawLine(50, 50, 50, dpToPx(190), mAxisPaint);
int centerX = getWidth() / 2;
//TESTING draw points
//canvas.drawCircle(centerX, 100, 20, mPointPaint);
canvas.drawText("0", 25, dpToPx(190), mTextPaint);
// Add this line.
if (mCircle != null) {
canvas.drawCircle(mCircle.cx, mCircle.cy, mCircle.radius, mPointPaint);
}
}
Шаг 3: Изменить код в onClick () метод.
@Override
public void onClick(View v) {
if (mCircle == null) {
mCircle = new Circle();
}
mCircle.cx = 50;
mCircle.cy = 50;
mCircle.radius = 50;
// This will call onDraw() method under the hood.
invalidate();
// For debugging.
Toast.makeText(getContext(), "Add button clicked!!", Toast.LENGTH_LONG).show();
}