yandexmapkit-android
yandexmapkit-android copied to clipboard
OverlayItem zoom with map
Коллеги, подскажите пожалуйста, существует ли возможность масштабировать overlayItem пропорцианально карте?
Моя задача - обеспечить, что бы выделенная область все время покрывала одну и ту же площадь. Сейчас при зуме я получаю следующий результат:
Можно. Но вам придется самому отслеживать что изменился зум и далее перерисовывать область меняя масштаб. То есть у вас появляется зависимость радиуса от масштаба.
14 июл. 2017 г. 14:05 пользователь "Denis Volyntsev" < [email protected]> написал:
Коллеги, подскажите пожалуйста, существует ли возможность масштабировать overlayItem пропорцианально карте?
[image: image] https://user-images.githubusercontent.com/1181883/28209880-e28cd106-6894-11e7-9db9-f3259d07fc5b.png
Моя задача - обеспечить, что бы выделенная область все время покрывала одну и ту же площадь. Сейчас при зуме я получаю следующий результат:
[image: image] https://user-images.githubusercontent.com/1181883/28209911-062e2a6a-6895-11e7-96e6-64dc4933f3ff.png
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/yandexmobile/yandexmapkit-android/issues/280, or mute the thread https://github.com/notifications/unsubscribe-auth/ABSEm8V9WPKKhEBS2NHwFMjup1TYPMGtks5sN0tagaJpZM4OYHw6 .
@saint13 Спасибо, а подскажите, как это лучше сделать, с помощью
mapController.addMapListener(new OnMapListener() {});
?
Те как можно отследить коэффициент зума?
Могу посоветовать посмотреть как это сделано с кругом погрешности для локации. Можно самому посмотреть реализацию. Надеюсь это понятно как сделать ).
14 июл. 2017 г. 14:32 пользователь "Denis Volyntsev" < [email protected]> написал:
@saint13 https://github.com/saint13 Спасибо, а подскажите, как это лучше сделать, с помощью
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yandexmobile/yandexmapkit-android/issues/280#issuecomment-315337975, or mute the thread https://github.com/notifications/unsubscribe-auth/ABSEm0wFoL6Uxh6PiNf7Rajplr8pLY-Nks5sN1HAgaJpZM4OYHw6 .
Нет -( В семпле я не вижу такого примера. Тыкнете носом пожалуйста)
В самплах такого нет. Можно посмотреть в самом мапкит через студию.
14 июл. 2017 г. 14:49 пользователь "Denis Volyntsev" < [email protected]> написал:
Нет -( В семпле я не вижу такого примера. Тыкнете носом пожалуйста)
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yandexmobile/yandexmapkit-android/issues/280#issuecomment-315340851, or mute the thread https://github.com/notifications/unsubscribe-auth/ABSEm1QfZsgq0rnWfueU7wSdp6cuTm--ks5sN1XlgaJpZM4OYHw6 .
Трудновато там разбираться, учитывая, что код обфусцирован. Можно где то найти исходники sdk?
@Defuera юзай гугл карты и будет тебе счастье. Создал объект Circle() задал центр и радиус в метрах, всё.
@Defuera если ещё актуально, вот код. Параметры paint-а поменяй только, это я для себя писал
final class YMCircle extends Overlay implements IRender {
private double radius;
private final Paint paint;
private GeoPoint center;
private final OverlayItem overlay;
YMCircle(MapController mapController, GeoPoint center, double radius, boolean stroke) {
super(mapController);
this.radius = radius;
this.center = center;
final ShapeDrawable oval = new ShapeDrawable(new OvalShape());
paint = oval.getPaint();
overlay = new OverlayItem(center, oval);
addOverlayItem(overlay);
if (stroke) {
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(ViewKt.dpToPx(3));
paint.setColor(0xFF1D93D2);
} else {
paint.setStyle(Paint.Style.FILL);
paint.setColor(0x451D93D2);
}
}
@Override
public int compareTo(@NonNull Object o) {
return 0;
}
public void setRadius(double radius) {
this.radius = radius;
}
public void setCenter(GeoPoint center) {
this.center = center;
overlay.setGeoPoint(center);
}
public GeoPoint getCenter() {
return center;
}
@Override
public void draw(Canvas canvas, OverlayItem overlayItem) {
final ScreenPoint sp = getMapController().getScreenPoint(center);
final int width = canvas.getWidth();
final double widthMeters = CoordConversion.getDistance(
getMapController().getGeoPoint(new ScreenPoint(0, 0)),
getMapController().getGeoPoint(new ScreenPoint(0, width))
);
final double radiusPixels = width * radius / widthMeters;
canvas.drawCircle(sp.getX(), sp.getY(), (float) radiusPixels, paint);
}
@Override
public IRender getIRender() {
return this;
}
}
@rostopira Можно ли использовать ваше решение с DragAndDropItem?