Как сделать так, чтобы изображение метки визуально было одного размера на устройствах с разным разрешением экрана и ppi?
Задаю иконку метки таким образом:
locationImage = ImageProvider.fromResource(MainActivity.this, R.drawable.location).getImage();
myPlacemark.setIcon(ImageProvider.fromBitmap(Bitmap.createScaledBitmap(locationImage, 70, 200, false)));
Тестирую на устройстве с экраном 2340×1080, около 400 ppi. Метки отображаются как нужно. Если же запускаю в эмуляторе на телефоне с экраном, у которого размер, разрешение и ppi поменьше, то метки там выглядят огромными.
Как это можно решить, может какую-то формулу использовать?
Ответы (1 шт):
Автор решения: all_possible
→ Ссылка
Решено на основе этой статьи.
Сначала рассчитано по формуле из статьи нужное значение в dp.
Дальше dp преобразую в px в зависимости от характеристик экрана (PLACEMARK_WIDTH_DP и PLACEMARK_HEIGHT_DP - константы, содержащие значение ширины и длины метки в dp):
placemarkWidthPx = (int) TypedValue.applyDimension(
COMPLEX_UNIT_DIP,
PLACEMARK_WIDTH_DP,
getResources().getDisplayMetrics());
placemarkHeightPx = (int) TypedValue.applyDimension(
COMPLEX_UNIT_DIP,
PLACEMARK_HEIGHT_DP,
getResources().getDisplayMetrics());
После этого размеры метки задаю, исходя из рассчитанных значений:
myPlacemark.setIcon(ImageProvider.fromBitmap(Bitmap.createScaledBitmap(locationImage, placemarkWidthPx, placemarkHeightPx, false)));