2016-02-04 3 views
2

Я создаю Skobbler аннотацию следующим образом:Skobbler аннотаций с кнопкой

markerCoords = mapView.pointToCoordinate(skScreenPoint); //gives us the coordinate 

SKAnnotation annotation = new SKAnnotation(11); 
SKAnnotationView view = new SKAnnotationView(); 

View v = getLayoutInflater().inflate(R.layout.annotation_marker, null, false); 
v.findViewById(R.id.btn_destination).setOnClickListener(destListener); 
v.findViewById(R.id.btn_origin).setOnClickListener(originListener); 
view.setView(v); 

annotation.setAnnotationView(view); 
annotation.setLocation(mapView.pointToCoordinate(skScreenPoint)); 
annotation.setMininumZoomLevel(1); 

mapView.addAnnotation(annotation, SKAnimationSettings.ANIMATION_POP_OUT); 

Вид R.layout.annotation_marker содержит пару кнопок, но я не могу нажать/нажимать на них. Мой клик проходит через аннотацию и отображает карту (я ее обнаружил). Я попытался использовать requestFocus() в представлении, когда я его раздуваю, но это не влияет. У меня также есть android:clickable='true' в XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="200dp" 
    android:layout_height="110dp" 
    android:layout_gravity="center_horizontal"> 
    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Origin" 
     android:id="@+id/btn_origin" 
     android:layout_gravity="right" 
     android:focusable="true" 
     android:clickable="true"/> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:focusable="true" 
     android:text="Destination" 
     android:id="@+id/btn_destination" /> 
</LinearLayout> 

Как получить событие щелчка, чтобы поразить кнопки вместо основной карты?

+0

Вам необходимо установить центральную точку изображения, нажав на аннотацию, будет зависеть от этого значения. – SylviA

+0

@SylviA Какова центральная точка изображения и как установить это значение? И о каком имидже вы говорите? Спасибо – Cobbles

+0

Я думаю, что я неправильно понял. Я думал об этом сценарии: http://stackoverflow.com/questions/27589941/skobbler-onannotationselected-not-called-when-i-set-my-own-annotations – SylviA

ответ

2

Поскольку события onClick не выполняются, решение для включения событий на разных представлениях, расположенных на карте, включает их в различные аннотации с использованием аннотационных представлений и действий выполнения на обратном вызове onAnnotationSelected (поэтому должен быть один вид за аннотация).

Для того, чтобы вызвать триггер события естественным образом, необходимо назначить соответствующее смещение для аннотации, чтобы активировать обратный вызов onAnnotationSelected при нажатии на фактический просмотр, а не на расширение аннотации.

@Override 
public void onSurfaceCreated(SKMapViewHolder mapHolder) { 
…. 
SKAnnotation annotation = new SKAnnotation(137); 
SKAnnotationView annotationView = new SKAnnotationView(); 
View v = getLayoutInflater().inflate(R.layout.bug_2_btn_layout,null,false); 
annotationView.setView(v); 
annotation.setAnnotationView(annotationView); 
annotation.setLocation(new SKCoordinate(52.520008,13.404954)); 
annotation.setMininumZoomLevel(1); 


double viewToLayoutRatio = getResources().getDimension(R.dimen.originBtn_width)/getResources().getDimension(R.dimen.annotationLayout_width); 
annotation.setOffset(new SKScreenPoint((float) (annotation.getOffset().getX()-(viewToLayoutRatio*getResources().getDimension(R.dimen.originBtn_width))), (float) (annotation.getOffset().getY()+(viewToLayoutRatio/3)*getResources().getDimension(R.dimen.originBtn_width)))); 

mapView.addAnnotation(annotation, SKAnimationSettings.ANIMATION_POP_OUT); 
… 
} 

@Override 
public void onAnnotationSelected(final SKAnnotation annotation) { 
switch (annotation.getUniqueID()) { 
… 
case 137: 
Toast.makeText(getApplicationContext(),"Annotation was clicked",Toast.LENGTH_SHORT); 
View v = getLayoutInflater().inflate(R.layout.bug_2_btn_layout,null,false); 
originClicked(v); 
break; 
} 
} 
Смежные вопросы