Нарисуйте линию между 2 точками расстояния на Android
-
27-10-2019 - |
Вопрос
Допустим, у нас есть холст 400x800, и я хочу провести линию, соединяющую точки P1 (10,10) и P2 (500000 800000). Как видите, вторая точка находится далеко за пределами границ холста. Если я использую Canvas.darwline (P1.x, P1.Y, P2.x, P2.y, Paint), приложение замораживает, и приложение становится непригодным для использования. Использование отсечения не решает проблему, двигатель рисования все еще пытается нарисовать пиксели на весь путь ко второй точке
Есть предложения или обходной путь?
Решение
Если P2 находится за пределами видимой области (480x800 в данном конкретном случае), затем вычислите пересечение этой линии с границей, затем используйте точку пересечения вместо P2.
Другие советы
Вы можете уменьшить свою линию, с чем -то вроде этого:
int maxX = 400;
int maxY = 800;
//Calculate how much we have to scale down to fit in the bounds:
float scaleX = (maxX - p1.x)/p2.x;
float scaleY = (maxY - p1.y)/p2.y;
//Get the smallest scale, so that we fit in both axises.
float scale = Math.min(scaleX, scaleY);
//Only scale if we are scaling down. There is no need to make lines smaller than the screen scale up to the screen bounds:
if(scale < 1.0f){
p2.x *= scale;
p2.y *= scale;
}
Я не пробовал это, поэтому я не могу гарантировать, что это сработает.