2013-04-09 1 views
0

Я использую Polaris Library для Android Maps, поскольку она имеет поддержку кластеризации: Polaris with Clustering. Я не полагаясь на Google Maps V2 потому что уедет из моей цели многой устройства.Как настроить информацию, отображаемую в Android Maps с помощью Polaris Library

Что мне нужно сделать, это возможность персонализировать информацию, отображаемую на воздушном шаре. Когда пользователь удаляет маркер, необходимо отобразить воздушный шар с изображением слева, 4 строки текста посередине, а другой - с правой стороны.

Я обменяю пару писем с создателем Polaris, который не может дать полную поддержку каждому разработчику, используя его библиотеку по понятным причинам. Он намекнул мне на использование MapCalloutView # setCustomView, но я не могу понять это.

Заранее спасибо.

+0

'' это оставило бы из моей цели множество устройств ". Менее 2% на май и, как ожидается, менее 0,1% на конец года. [Dashboards] (http://developer.android.com/about/dashboards/index.html#) –

+0

Мое приложение предназначено для Латинской Америки, поэтому эти цифры недостаточно точны. – Ejmedina

ответ

0

Я наконец-то заработал.

Прежде всего я расширил аннотацию, чтобы добавить дополнительные поля:

public class CustomAnnotation extends Annotation { 
private CustomObject cObject; 

public CustomObject getCustomObject() { 
    return cObject; 
} 

public void setCustomObject(CustomObject cObject) { 
    this.cObject = cObject; 
} 

public CustomAnnotation(GeoPoint point, String title, String snippet,CustomObject cObject) { 
    super(point, title, snippet); 
    this.cObject = cObject; 
} 

Я создал макет для CallOutView:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content" 
android:paddingLeft="5dip" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<LinearLayout 
     android:id="@+id/balloon_inner_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_gravity="center_vertical"> 
    <ImageView 
     android:id="@+id/image" 
     android:layout_width="50dip" 
     android:layout_height="50dip" 
     android:contentDescription="@string/descr_image" 
     android:src="@drawable/stub" 
     android:scaleType="centerCrop" 
     android:layout_gravity="center_vertical"/> 
    <LinearLayout 
      android:paddingLeft="5dip" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <TextView 
     android:id="@+id/price" 
    android:textStyle="bold" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 
     <TextView 
    android:id="@+id/address" 
    android:textStyle="bold" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 
    <TextView 
     android:id="@+id/sup" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"    
     android:visibility="gone"/> 
    <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:id="@+id/rooms" 
       android:visibility="gone"/>  
      </LinearLayout> 
    </LinearLayout> 

В моем классе MapActivity Я реализован OnAnnotationSelectionChangedListener. Не забудьте установить слушателя.

В MapActivity # onAnnotationSelected Я бросаю аннотация получила к моему CustomAnnotation, так что я могу использовать дополнительные поля, Накачайте макет в виде объект и SetText всего моего TextViews:

@Override 
public void onAnnotationSelected(PolarisMapView mapView, 
     MapCalloutView calloutView, int position, Annotation annotation) { 
    CustomAnnotation ca = (CustomAnnotation) annotations.get(position); 
    View view = (View)getLayoutInflater().inflate(R.layout.balloon_test, null); 
      CustomObject object = ca.getCustomObject(); 
     TextView txView = (TextView)view.findViewById(R.id.field1); 
     txView.setText(object.getField1()); 
     txView.setVisibility(View.VISIBLE); 
    ... 
      //set aditional data in your callout 
      ... 
        calloutView.setDisclosureEnabled(true); 
     calloutView.setClickable(true); 
     calloutView.setCustomView(view); 
     calloutView.show(mPolarisMapView, annotation.getPoint(), false); 
     } 

Вот и все. Надеюсь, это поможет кому-то.