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

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

18
задан Iamat8 17 December 2015 в 09:05
поделиться

6 ответов

Прием здесь должен поместить другой Контейнер макетов, где Вы хотите поместить 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 должен теперь появиться при длинном щелчке, не крадя сенсорные события карты.

19
ответ дан 30 November 2019 в 06:04
поделиться

Reto: спасибо за Ваш ответ, но идея должен был сделать это без использование разметки 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);
4
ответ дан 30 November 2019 в 06:04
поделиться

от поток групп 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

2
ответ дан 30 November 2019 в 06:04
поделиться

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

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

MapView.LayoutParams params = MapView.LayoutParams(

ошибка Eclipse дал мне, был

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

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

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

мне потребовалось некоторое время для обнаружения, поскольку я - n00b :D

2
ответ дан 30 November 2019 в 06:04
поделиться

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

0
ответ дан 30 November 2019 в 06:04
поделиться

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

view.setBuiltInZoomControls (true);

23
ответ дан 30 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: