Рисунок на Google Maps

Ответить
MrBAD
Сообщения: 15
Зарегистрирован: 17 авг 2015, 13:01

Рисунок на Google Maps

Сообщение MrBAD » 21 авг 2015, 10:15

Помогите разобраться. Необходимо на GoogleMaps нарисовать круг занимающий приблизительно 80% экрана по ширине. При изменении масштаба карты круг не должен меняться.

Вариант 1. Нарисовал свой PNG. При ширине экрана в 480 точек, круг почему то пришлось сделать 290 точек диаметром? Не понял почему (может это зависит от эмулятора еще?). И видно что он пиксельный (рисованный) грубый.

Вариант 2. Привязаться к масштабу карты. Рисовать круг средствами API Google Maps. Но там требуется диаметр в метрах. Получается надо все время пересчитывать сколько метров придется на всю ширину экрана в разных масштабах карты и разрешениях экрана - и рисовать исходя из этого.

Может есть другой вариант?
Заранее спасибо.

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Рисунок на Google Maps

Сообщение Dark67 » 21 авг 2015, 11:19

попробуй применить это
googleMap.getProjection().getVisibleRegion();

или тебе нужно "окошко", через которое видно карту?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Рисунок на Google Maps

Сообщение Mikhail_dev » 21 авг 2015, 12:17

Пару месяцев назад аналогичная задачка была, для геозон.
Надо сделать кастомную вьюшку, наподобие такой.
[syntax=java5]
public class CircleView extends View {

private int mColor = getResources().getColor(android.R.color.transparent);

public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public void setCircleColor(int color) {
mColor = color;
invalidate();
}

public int getCircleColor() {
return mColor;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int x = getWidth();
int y = getHeight();
int radius;
radius = Math.min(x, y) / 3;
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(getResources().getColor(android.R.color.transparent));
canvas.drawPaint(paint);
paint.setColor(mColor);
canvas.drawCircle(x / 2, y / 2, radius, paint);
}
}
[/syntax]
Дальше добавляйте в свой XML что-то типа
[syntax=xml]
<RelativeLayout
android:id="@+id/circle_container"
android:background="@android:color/darker_gray"
android:layout_width="match_parent"
android:layout_height="match_parent">
<your.package.name.CircleView
android:id="@+id/circle_view"
android:background="@android:color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
[/syntax]
Ну а дальше в коде находите этот элемент
[syntax=java5]CircleView circleView = (CircleView) findViewById(R.id.circle_view);[/syntax]

Важно чтобы @+id/circle_container занимал весь экран, поверх вашей карты

Ответить