У меня есть специальное приложение для Android, основанное на этом учебном пособии (пример 3), но рисующем линии, а не контуры.Целью приложения является отслеживание серии связанных линий в пользовательском представлении, координаты которых вместе с некоторой информацией о времени передаются дейтаграммами UDP роботу, управляемому платой разработки NodeMCU.Линии нарисованы с использованием метода TouchEvent пользовательского представления.После завершения пути нажимается кнопка, которая запускает функцию в MainActivity для расчета деталей пути и отправляет их роботу.Все это прекрасно работает, но сейчас я хочу наложить первоначально отслеживаемый путь на набор линий, обозначающих прогресс робота.Поскольку мое приложение стоит, мне нужно было бы сгенерировать эти строки из слушателя кнопки в MainActivity, предположительно, с помощью метода customView onDraw, но я не могу найти никакого способа сделать это.
Мой код слушателя кнопки MainActivity -
clear = (Button)findViewById(R.id.button2);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
coords = TouchEventView.getFloats(TouchEventView.points);
if (coords.length < 4) {
Toast.makeText(MainActivity.this,"You must have at least one line",Toast.LENGTH_LONG).show();
}
else if ( coords.length < 6) {
SendData(length(coords[0],coords[1],coords[2],coords[3]));
SendData("s");
}
else {
for (int i = 0; i<coords.length-4; i=i+4) {
SendData(length(coords[i],coords[i+1],coords[i+2],coords[i+3]));
SendData(turn(coords[i],coords[i+1],coords[i+2],coords[i+3],coords[i+6],coords[i+7]));
}
int i = coords.length-4;
SendData(length(coords[i],coords[i+1],coords[i+2],coords[i+3]));
SendData("s");
}
}
});
и мой код пользовательского просмотра
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
gestureDetector.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (! canvas_cleared) {
if (x < 0) {
x = eventX;
y = eventY;
startx = x;
starty = y;
}
else {
x = x1;
y = y1;
}
points.add(x);
points.add(y);
x1 = eventX;
y1 = eventY;
}
return true;
case MotionEvent.ACTION_MOVE:
x1 = eventX;
y1 = eventY;
break;
case MotionEvent.ACTION_UP:
if (canvas_cleared) {
x = -1;
y = -1;
canvas_cleared = false;
}
else {
points.add(eventX);
points.add(eventY);
}
break;
default:
return false;
}
invalidate();
return true;
}
Как рисовать линии в пользовательском представлении из MainActivity?