Помогите разобраться. Необходимо на GoogleMaps нарисовать круг занимающий приблизительно 80% экрана по ширине. При изменении масштаба карты круг не должен меняться.
Вариант 1. Нарисовал свой PNG. При ширине экрана в 480 точек, круг почему то пришлось сделать 290 точек диаметром? Не понял почему (может это зависит от эмулятора еще?). И видно что он пиксельный (рисованный) грубый.
Вариант 2. Привязаться к масштабу карты. Рисовать круг средствами API Google Maps. Но там требуется диаметр в метрах. Получается надо все время пересчитывать сколько метров придется на всю ширину экрана в разных масштабах карты и разрешениях экрана - и рисовать исходя из этого.
Может есть другой вариант?
Заранее спасибо.
Рисунок на Google Maps
Re: Рисунок на Google Maps
попробуй применить это
googleMap.getProjection().getVisibleRegion();
или тебе нужно "окошко", через которое видно карту?
googleMap.getProjection().getVisibleRegion();
или тебе нужно "окошко", через которое видно карту?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Рисунок на Google Maps
Пару месяцев назад аналогичная задачка была, для геозон.
Надо сделать кастомную вьюшку, наподобие такой.
[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 занимал весь экран, поверх вашей карты
Надо сделать кастомную вьюшку, наподобие такой.
[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 занимал весь экран, поверх вашей карты