Я рисую многоугольник на карте Google, и он отлично работает. Что мне нужно, это сохранить этот полигон как растровое изображение для фиксированного масштаба. Я использую этот код для этого.
private static List<Point> scalePolygonPoints(List<LatLng> points, float scale, Projection projection) {
List<Point> scaledPoints = new ArrayList(points.size());
LatLng polygonCenter = getPolygonCenterPoint(points);
Point centerPoint = projection.toScreenLocation(polygonCenter);
for (int i=0; i < points.size(); i++) {
Point screenPosition = projection.toScreenLocation(points.get(i));
screenPosition.x = (int) (scale * (screenPosition.x - centerPoint.x) + centerPoint.x);
screenPosition.y = (int) (scale * (screenPosition.y - centerPoint.y) + centerPoint.y);
scaledPoints.add(screenPosition);
}
return scaledPoints;
}
private static LatLng getPolygonCenterPoint(List<LatLng> polygonPointsList){
LatLng centerLatLng = null;
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for(int i = 0; i < polygonPointsList.size() ; i++) {
builder.include(polygonPointsList.get(i));
}
LatLngBounds bounds = builder.build();
centerLatLng = bounds.getCenter();
return centerLatLng;
}
А затем создать растровое изображение
private Bitmap createPolylineBitmap(List<Point> scaledPoints) {
Bitmap bitmap = Bitmap.createBitmap(800, 600, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(ContextCompat.getColor(this, R.color.black));
paint.setStrokeWidth(10);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setAntiAlias(true);
for (int i = 0; i < scaledPoints.size(); i++) {
try {
canvas.drawLine(scaledPoints.get(i).x, scaledPoints.get(i).y, scaledPoints.get(i + 1).x, scaledPoints.get(i + 1).y, paint);
}
catch(Exception ex){
canvas.drawLine(scaledPoints.get(i).x, scaledPoints.get(i).y, scaledPoints.get(0).x, scaledPoints.get(0).y, paint);
}
}
return bitmap;
}
Проблема заключается в том, что этот метод использует проекцию экрана, и когда пользователь изменяет масштаб или перетаскивает карту, он меняет положение многоугольника на растровом изображении или даже на его четкие границы. Как сделать так, чтобы рисовать многоугольник одинакового размера на всех устройствах, независимо от масштаба или положения камеры?
EDIT:
Таким образом, в основном мне удалось получить правильный размер карты масштабирования полигонов в правильном положении перед сохранением ее в растровое изображение. Но проблема в том, что когда я использую устройство с разным разрешением, размер полигона также меняется. Как это предотвратить?