Ответ 1
То, что вы пытаетесь достичь, возможно.
Вы можете увидеть рецепт в этом ответе: fooobar.com/questions/37642/...
И работающая реализация Google Play.
Мне нужно окно с инфо-окном с двумя нажатиями кнопки, как указано выше. В этом случае, когда больше маркеров и нажмите любой из них, тогда окно должно быть открытым, а при нажатии на другой маркер другое окно должно открывать и закрывать предыдущее окно, а также в одиночном нажмите кнопку. есть ли какая-либо конкретная причина, по которой google map v2 не поддерживает компонент live, например кнопку, флажок?
То, что вы пытаетесь достичь, возможно.
Вы можете увидеть рецепт в этом ответе: fooobar.com/questions/37642/...
И работающая реализация Google Play.
MainActivity.java
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class MainActivity extends Activity {
private ViewGroup infoWindow;
private TextView infoTitle;
private TextView infoSnippet;
private Button infoButton1, infoButton2;
private OnInfoWindowElemTouchListener infoButtonListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapwrapperlauot);
final MapFragment mapFragment =
(MapFragment) getFragmentManager().findFragmentById(R.id.map);
final MapWrapperLayout mapWrapperLayout =
(MapWrapperLayout) findViewById(R.id.map_relative_layout);
final GoogleMap map = mapFragment.getMap();
mapWrapperLayout.init(map, getPixelsFromDp(this, 39 + 20));
final Marker ki = map.addMarker(new MarkerOptions()
.position(new LatLng(50.08, 14.43))
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.circles)));
infoWindow = (ViewGroup) getLayoutInflater()
.inflate(R.layout.activity_main, null);
infoButton1 = (Button) infoWindow.findViewById(R.id.b1);
infoButton2 = (Button) infoWindow.findViewById(R.id.b2);
infoButtonListener = new OnInfoWindowElemTouchListener(infoButton1,
getResources().getDrawable(R.drawable.ic_launcher),
getResources().getDrawable(R.drawable.ic_launcher)) {
@Override
protected void onClickConfirmed(View v, Marker marker) {
Toast.makeText(getApplicationContext(),
"click on button 1", Toast.LENGTH_LONG).show();
}
};
infoButton1.setOnTouchListener(infoButtonListener);
infoButtonListener = new OnInfoWindowElemTouchListener(infoButton2,
getResources().getDrawable(R.drawable.ic_launcher),
getResources().getDrawable(R.drawable.ic_launcher)) {
@Override
protected void onClickConfirmed(View v, Marker marker) {
Toast.makeText(getApplicationContext(),
"click on button 2", Toast.LENGTH_LONG).show();
}
};
infoButton2.setOnTouchListener(infoButtonListener);
infoWindow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
map.setInfoWindowAdapter(new InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
infoButtonListener.setMarker(marker);
mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow);
return infoWindow;
}
@Override
public View getInfoContents(Marker marker) {
// Setting up the infoWindow with current marker info
return null;
}
});
ki.showInfoWindow();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(50.08, 14.43), 15));
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
}
public static int getPixelsFromDp(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
}
activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/marker" >
<Button
android:id="@+id/b1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button1"
android:layout_marginBottom="10dp" />
<Button
android:id="@+id/b2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Button2"
android:layout_marginBottom="10dp" />
</LinearLayout>
</RelativeLayout>
теперь скопируйте следующие файлы из ссылки fooobar.com/questions/37642/...
Он будет работать.
То, чего вы пытаетесь достичь, невозможно. Даже если вы создадите xml-макет для своего инфо-окна. Содержимое информационного окна отображается и отображается как изображение на картах. Таким образом, он может принимать только один клик-прослушиватель для всего окна. вы не можете указать несколько кликов для этого окна.
UPEDATE: Из Документов:
Примечание. Отображаемое информационное окно не является живым. Представление отображается как изображение (используя View.draw(Canvas)) во время его возврата. Это означает, что любые последующие изменения в представлении не будут отображаться информационным окном на карте. Чтобы позднее обновить информационное окно (например, после загрузки изображения), вызовите showInfoWindow(). Кроме того, информационное окно не будет учитывать какую-либо интерактивность, характерную для обычного вида, такого как события касания или жестов. Однако вы можете прослушивать общий клик по всему информационному окну, как описано в разделе ниже.
На самом деле существует библиотека, которая может решить вашу проблему и добавить информационное окно, которое является живым, и вы можете взаимодействовать с ним.
Я построил образец проекта студии Android для этого вопроса.
выходные снимки экрана: -
Загрузить полный исходный код проекта Нажмите здесь
Обратите внимание: вам нужно добавить свой ключ API в Androidmanifest.xml