2013-11-29 2 views
4

Как я могу определить кнопку setOnClickListener в информационном окне на карте google? На самом деле в моем информационном окне у меня есть кнопка, и я хочу нажать на эту кнопку. Можно ли это сделать?Кнопка onclicklistener на infowindow в google map

+0

проверить этот ответ, это может быть полезно http://stackoverflow.com/a/15040761/2136046 –

+0

Thanx за быстрый ответ. на самом деле дело в том, что я также использую кластеры маркеров на карте, и для кластеризации я использую библиотеку, поэтому теперь очень сложно собрать код для кластеризации классов библиотек. –

+0

У вас получился какой-то результат? –

ответ

18

Попробуйте

mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 
     @Override 
     public void onInfoWindowClick(Marker marker) { 

     } 
    }); 
+0

его работающий для меня – Prasad

+0

этот «mMap.setOnInfoWindowClickListener» работает, щелкая любую часть InfoWindow. Мне нужно написать событие нажатия кнопки внутри InfoWindow. Является ли это возможным ? –

+1

@PremkumarManipillai no. InfoWindows отображаются как изображения и не являются живыми. – DiscDev

5

На самом деле это не posiable, Google Map оказывает содержание вас обычай InfoWindow в изображение и выводит его к вам, как изображения. Поэтому вы устанавливаете прослушиватель кликов только для всего окна, а не для него.

Ваш единственный выбор - установить ClickListener на все InfoWindow и открыть диалоговое окно с нужным вам контентом, а не делать это непосредственно внутри InfoWindow.

От Google Docs: https://developers.google.com/maps/documentation/android/marker#info_windows

Примечание: информационное окно, которое обращено не живой вид. Представление представляет собой в качестве изображения (с использованием View.draw(Canvas)) в то время, когда оно возвращается . Это означает, что любые последующие изменения в представлении не будут отображаться на информационном окне на карте . Чтобы обновить информационное окно позже (например, после загрузки изображения), вызовите showInfoWindow(). Кроме того, информационное окно не будет учитывать любую интерактивность , типичную для обычного вида, такую ​​как события касания или жестов. Однако вы, , можете прослушать общий клик по всему информационному окну как , описанный в следующем разделе.

+0

Правильный ответ приведен на https://developers.google.com/maps/documentation/android-api/marker#info_windows –

0

Попробуйте создать свой собственный класс, как

public abstract class OnInfoWindowItemTouchListener implements OnTouchListener { 
    private final View view; 
    private final int bgDrawableNormal; 
    private final int bgDrawablePressed; 
    private final Handler handler = new Handler(); 

    private Marker marker; 
    private boolean pressed = false; 

    public OnInfoWindowItemTouchListener(View view, int bgDrawableNormal, int bgDrawablePressed) { 
     this.view = view; 
     this.bgDrawableNormal = bgDrawableNormal; 
     this.bgDrawablePressed = bgDrawablePressed; 
    } 

    public void setMarker(Marker marker) { 
     this.marker = marker; 
    } 

    @Override 
    public boolean onTouch(View vv, MotionEvent event) { 
     if (0 <= event.getX() && event.getX() <= view.getWidth() && 
      0 <= event.getY() && event.getY() <= view.getHeight()) 
     { 
      switch (event.getActionMasked()) { 
      case MotionEvent.ACTION_DOWN: startPress(); break; 

      // We need to delay releasing of the view a little so it shows the pressed state on the screen 
      case MotionEvent.ACTION_UP: handler.postDelayed(confirmClickRunnable, 150); break; 

      case MotionEvent.ACTION_CANCEL: endPress(); break; 
      default: break; 
      } 
     } 
     else { 
      // If the touch goes outside of the view's area 
      // (like when moving finger out of the pressed button) 
      // just release the press 
      endPress(); 
     } 
     return true; 
    } 

    private void startPress() { 
     if (!pressed) { 
      pressed = true; 
      handler.removeCallbacks(confirmClickRunnable); 
      view.setBackgroundResource(bgDrawablePressed); 
      if (marker != null) 
       marker.showInfoWindow(); 
     } 
    } 

    private boolean endPress() { 
     if (pressed) { 
      this.pressed = false; 
      handler.removeCallbacks(confirmClickRunnable); 
      view.setBackgroundResource(bgDrawableNormal); 
      if (marker != null) 
       marker.showInfoWindow(); 
      return true; 
     } 
     else 
      return false; 
    } 

    private final Runnable confirmClickRunnable = new Runnable() { 
     public void run() { 
      if (endPress()) { 
       onClickConfirmed(view, marker); 
      } 
     } 
    }; 

    /** 
    * This is called after a successful click 
    */ 
    protected abstract void onClickConfirmed(View v, Marker marker); 
} 

Используйте его в вашей деятельности:

final OnInfoWindowItemTouchListener buttonListener = new   OnInfoWindowItemTouchListener(markHere, 0, 0) { 
       @Override 
       protected void onClickConfirmed(View v, Marker marker) { 
// more code goes here 
} 
} 
+0

Спасибо shylendra за ваш быстрый ответ. Но я просто хочу знать, как вы находите событие с кликом над информационным окном? –

0

Мы на самом деле пытались решить эту проблему путем разработки библиотеки из может облегчить создание живой (интерактивные) информационные окна.

https://github.com/Appolica/InteractiveInfoWindowAndroid

Я знаю, что это старый вопрос, но я надеюсь, что это может помочь кому-то в будущем.

Вы можете в основном добавить свой собственный фрагмент в качестве информационного окна, используя менеджер, предоставленный нашей библиотекой. Ниже приведена краткая информация о том, как легко использовать библиотеку. Проверьте ссылку выше для получения дополнительной информации

final MapInfoWindowFragment mapInfoWindowFragment = 
    (MapInfoWindowFragment) getSupportFragmentManager().findFragmentById(R.id.infoWindowMap); 
final InfoWindow infoWindow = new InfoWindow(marker, markerSpec, fragment); 
// Shows the InfoWindow or hides it if it is already opened. 
mapInfoWindowFragment.infoWindowManager().toggle(infoWindow, true); 
Смежные вопросы