Размещение управления масштабированием в MapView

голоса
17

Я пытаюсь получить элементы управления масштабированием , чтобы показать в mapviewследующий код работает почти, но элементы масштабирования появляются в левом верхнем углу mapview, а не в нижней части центра , как я указанием через setGravity(). Может кто - нибудь просветить меня , что я не хватает?

zoomView = (LinearLayout) mapView.getZoomControls();
zoomView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)); 
zoomView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
mapView.addView(zoomView);

Эти просмотры / макеты все построены программно, не существует ни одного файла макета для настройки.

Задан 04/11/2008 в 22:30
источник пользователем
На других языках...                            


8 ответов

голоса
23

Добавьте следующую строку в OnCreate()метод вашего MapViewкласса:

view.setBuiltInZoomControls(true);

Ответил 23/03/2010 в 13:41
источник пользователем

голоса
19

Хитрость здесь, чтобы поместить другой макет контейнер, в котором вы хотите поместить ZoomControls, а затем вставьте ZoomControls в это.

Реальный фокус в том , чтобы использовать , RelativeLayoutа не LinearLayoutпозиционировать элементы, как показано в этом примере layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
  <com.google.android.maps.MapView
    android:id="@+id/myMapView"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="MY_MAP_API_KEY"
  />
  <LinearLayout android:id="@+id/layout_zoom" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
  /> 
</RelativeLayout> 

Layout_zoom LinearLayout элемент расположен в центре нижней части экрана, поместив его над средней / нижней части MapView.

Тогда в вашей деятельности - х onCreate, получить ссылку на layout_zoom элемент и вставить ZoomControl в него, так же, как вы уже сделали:

LinearLayout zoomLayout =(LinearLayout)findViewById(R.id.layout_zoom);  
View zoomView = myMapView.getZoomControls(); 
zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
myMapView.displayZoomControls(true);

В ZoomControls должен появиться на длинном щелчком мыши, без кражи карты события прикосновения.

Ответил 11/11/2008 в 08:27
источник пользователем

голоса
7

Выше, не работает для меня, но это (поместить элемент управления в правом нижнем углу):

mapView.setBuiltInZoomControls(true);
ZoomButtonsController zbc = mapView.getZoomButtonsController();
ViewGroup container = zbc.getContainer();
for (int i = 0; i < container.getChildCount(); i++) {
  View child = container.getChildAt(i);
  if (child instanceof ZoomControls) {
    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) child.getLayoutParams();
    lp.gravity = Gravity.RIGHT | Gravity.BOTTOM;
    child.requestLayout();
    break;
  } 
}
Ответил 12/05/2011 в 23:51
источник пользователем

голоса
4

Рето: спасибо за ответ, но идея в том, чтобы сделать это без использования макетов XML.

В конце концов я разработал эту проблему. Поскольку MapView подкласс ViewGroup, вы можете легко добавлять дочерние представления (например, элементы управления зумом). Все, что вам нужно, это экземпляр MapView.LayoutParams, и вы хорошо идти. Я сделал что-то вроде этого (кладет управление масштабированием в центре нижней части MapView).

  // layout to insert zoomcontrols at the bottom center of a mapview
  MapView.LayoutParams params = MapView.LayoutParams(
    LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT,
    mapViewWidth / 2, mapViewHeight,
    MapView.LayoutParams.BOTTOM_CENTER);

  // add zoom controls
  mapView.addView(mapView.getZoomControls(), params);
Ответил 28/11/2008 в 07:32
источник пользователем

голоса
2

Вы можете попробовать это:

MapView map = (MapView)findViewById(R.id.mapview);
map.setBuiltInZoomControls(true);
Ответил 25/09/2018 в 06:59
источник пользователем

голоса
2

из групп Google нити я нашел это:

ZoomControls без XML:

   public class MyMapActivity extends MapActivity {  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RelativeLayout relativeLayout = new RelativeLayout(this);
        setContentView(relativeLayout);

        final MapView mapView = new MapView(this, DEBUG_MAP_API_KEY);
        RelativeLayout.LayoutParams mapViewLayoutParams = new
RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT );
        relativeLayout.addView(mapView, mapViewLayoutParams);

        RelativeLayout.LayoutParams zoomControlsLayoutParams = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT );
        zoomControlsLayoutParams.addRule
(RelativeLayout.ALIGN_PARENT_BOTTOM);
        zoomControlsLayoutParams.addRule
(RelativeLayout.CENTER_HORIZONTAL);

        relativeLayout.addView(mapView.getZoomControls(),
zoomControlsLayoutParams);

        mapView.setClickable(true);
        mapView.setEnabled(true);

 } 

было 100% работает для меня с SDK1.1

Ответил 27/02/2009 в 12:45
источник пользователем

голоса
2

К сожалению, я не могу добавить комментарий к Jason Hudgins одобрили решение от 28 ноября в 6:32, но я получил крошечную ошибку с его кодом:

В этой строке:

MapView.LayoutParams params = MapView.LayoutParams(

Затмение ошибка дала мне было

"Метод LayoutParams (интермедиат, Int, Int, Int, Int) не определено для типа MapView"

вместо этого, создавая новый MapView.LayoutParams объект зафиксировал его, как это:

MapView.LayoutParams params = **new** MapView.LayoutParams(

Потребовалось некоторое время, чтобы узнать, как и я n00b: D

Ответил 22/01/2009 в 23:44
источник пользователем

голоса
0

Рето - проблема с использованием FILL_PARENT является то, что управление масштабированием затем «крадет» все события прикосновения; так что вы не можете прокручивать карту в то время как элементы управления масштабом видны. Вы знаете, как это предотвратить?

Ответил 08/11/2008 в 21:24
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more