将 Google 个地图添加到 RecyclerView
Adding Google Maps to a RecyclerView
我已经在 RecyclerView
中添加了地图视图以及其他类型的列表项,但是现在......我如何以及在哪里初始化地图,我在哪里监听 onMapReady 以便我可以放置一个标记之后,我该如何处理物品的回收?
知道在这种情况下最佳做法是什么吗?
例如,您可以使用 Glide 并加载地图预览,而不是地图片段
像这样:
GlideApp
.with(context)
.load("http://maps.google.com/maps/api/staticmap?center=" +
lat +
"," +
lng +
"&zoom=15&size=200x200&sensor=false" +
"&markers=color:red%7Clabel:C%" +
markerLat +
"," +
markerLlng)
.centerCrop()
.into(myImageView);
或使用库 - static-maps-api
有两种可能的方法来做这件事,
一个是 Google Static Maps API 使用,它会给你地图的快照。
另一个是,您可以在回收器项目中使用 com.google.android.gms.maps.MapView
并在您的 viewholder
中初始化,如下所示,
public class AdapterWithMap extends RecyclerView.Adapter<AdapterWithMap.CustomeHolder> {
@Override
public void onBindViewHolder(CustomeHolder holder, int position)
{
GoogleMap thisMap = holder.mapCurrent;
if(thisMap != null)
thisMap.moveCamera();//initialize your position with lat long or move camera
}
@Override
public void onViewRecycled(CustomeHolder holder)
{
// Cleanup MapView here?
if (holder.mapCurrent != null)
{
holder.mapCurrent.clear();
holder.mapCurrent.setMapType(GoogleMap.MAP_TYPE_NONE);
}
}
public class CustomeHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback {
GoogleMap mapCurrent;
MapView map;
public CustomeHolder(View view) {
super(view);
map = (MapView) view.findViewById(R.id.mapImageView);
if (map != null)
{
map.onCreate(null);
map.onResume();
map.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
MapsInitializer.initialize(getApplicationContext());
mapCurrent = googleMap;
}
}
}
google 地图中有一个叫做精简模式的东西,你可以在回收站视图中使用
检查这个litemode
和示例代码示例LiteListDemoActivity
我已经在 RecyclerView
中添加了地图视图以及其他类型的列表项,但是现在......我如何以及在哪里初始化地图,我在哪里监听 onMapReady 以便我可以放置一个标记之后,我该如何处理物品的回收?
知道在这种情况下最佳做法是什么吗?
例如,您可以使用 Glide 并加载地图预览,而不是地图片段 像这样:
GlideApp
.with(context)
.load("http://maps.google.com/maps/api/staticmap?center=" +
lat +
"," +
lng +
"&zoom=15&size=200x200&sensor=false" +
"&markers=color:red%7Clabel:C%" +
markerLat +
"," +
markerLlng)
.centerCrop()
.into(myImageView);
或使用库 - static-maps-api
有两种可能的方法来做这件事,
一个是 Google Static Maps API 使用,它会给你地图的快照。
另一个是,您可以在回收器项目中使用 com.google.android.gms.maps.MapView
并在您的 viewholder
中初始化,如下所示,
public class AdapterWithMap extends RecyclerView.Adapter<AdapterWithMap.CustomeHolder> {
@Override
public void onBindViewHolder(CustomeHolder holder, int position)
{
GoogleMap thisMap = holder.mapCurrent;
if(thisMap != null)
thisMap.moveCamera();//initialize your position with lat long or move camera
}
@Override
public void onViewRecycled(CustomeHolder holder)
{
// Cleanup MapView here?
if (holder.mapCurrent != null)
{
holder.mapCurrent.clear();
holder.mapCurrent.setMapType(GoogleMap.MAP_TYPE_NONE);
}
}
public class CustomeHolder extends RecyclerView.ViewHolder implements OnMapReadyCallback {
GoogleMap mapCurrent;
MapView map;
public CustomeHolder(View view) {
super(view);
map = (MapView) view.findViewById(R.id.mapImageView);
if (map != null)
{
map.onCreate(null);
map.onResume();
map.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
MapsInitializer.initialize(getApplicationContext());
mapCurrent = googleMap;
}
}
}
google 地图中有一个叫做精简模式的东西,你可以在回收站视图中使用
检查这个litemode
和示例代码示例LiteListDemoActivity