use*_*935 2 android listview google-maps android-listview
我想在listview上显示mapview.地图无法在listview中加载.如果我触摸地图视图,则会加载地图.如果我滚动列表视图mapview进入卸载初始阶段.我的listview适配器和截图给出,
公共类OfferListAdapter扩展BaseAdapter {
String lat="",lon="";
String adId;
Context context;
MapView mapView;
GoogleMap map;
Util g;
ArrayList<HashMap<String, String>> adList;
Bundle savedInstanceState;
public OfferListAdapter(final Context context, final ArrayList<HashMap<String, String>> addlist, final String type, final Bundle b) {
// TODO Auto-generated constructor stub
this.context=context;
this.adList=addlist;
this.listType=type;
this.savedInstanceState=b;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return adList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
private class ViewHolder
{
ImageView adImg;
TextView txt;
}
@SuppressLint("InflateParams")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
adId=null;
g=Util.getInstance(context);
final LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
final View view=mInflater.inflate(R.layout.offer_list_row, null);
final ViewHolder holder;
holder=new ViewHolder();
mapView = (MapView) view.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
// Gets to GoogleMap from the MapView and does initialization stuff
map = mapView.getMap();
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
// Showing / hiding your current location
map.setMyLocationEnabled(false);
// Enable / Disable zooming controls
map.getUiSettings().setZoomControlsEnabled(false);
// Enable / Disable my location button
map.getUiSettings().setMyLocationButtonEnabled(false);
// Enable / Disable Compass icon
map.getUiSettings().setCompassEnabled(false);
// Enable / Disable Rotate gesture
map.getUiSettings().setRotateGesturesEnabled(false);
// Enable / Disable zooming functionality
map.getUiSettings().setZoomGesturesEnabled(false);
MapsInitializer.initialize(context);
// Updates the location and zoom of the MapView
double latitude = 12.965119900000000000;
double longitude = 80.243980900000000000;
MarkerOptions marker = new MarkerOptions().position(
new LatLng(latitude, longitude))
.title("Hello Maps");
marker.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_RED));
map.addMarker(marker);
//Zoom Particular position
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude,
longitude)).zoom(12).build();
map.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
return view;
}
public void updateData(final ArrayList<HashMap<String, String>> addlist, final String type) {
// TODO Auto-generated method stub
this.adList=addlist;
this.listType=type;
}
Run Code Online (Sandbox Code Playgroud)
}
截图列表.1)此屏幕将在第一次加载时出现,

2)点击mapview后会出现此界面,

3)点击mapview 2后会出现此界面,

4)在mapview上点击10到15次后会出现此界面,

在listView中直接使用mapView是一项繁重的操作.这将导致延迟并导致您的应用程序的用户体验缓慢.要避免此行为,您可以使用静态映射.这将在列表视图中启用延迟加载地图,而且用户不必立即点击地图.
我在下面提供了一个使用此方法的小例子.首先从数据(API或DB)创建列表视图.然后将纬度和经度等数据传递给字符串,其中一些静态变量定义如下.
String getMapURL = "http://maps.googleapis.com/maps/api/staticmap?zoom=12&size=360x180&markers=size:mid|color:green|"
+ JOLocation.getString("latitude")
+ ","
+ JOLocation.getString("longitude")
+ "&sensor=false";
Run Code Online (Sandbox Code Playgroud)
上述构造的URL在浏览器中使用时返回.PNG文件.然后,在我的活动适配器中,此方法导致在应用程序中延迟加载地图,其中显示坐标的标记在运行时被提取,从而避免在代码中繁重的工作.
希望这会有所帮助!!!
| 归档时间: |
|
| 查看次数: |
3987 次 |
| 最近记录: |