我创建了一个使用谷歌地图的Android应用程序,我正在尝试优化它,因为它运行速度非常慢。我的应用程序可以在默认位置加载地图,然后添加附近地点的标记。每当用户滑动屏幕时,都会调用ParseJSON方法,并将用户可视区域的新标记添加到地图中。在添加新标记之前,通过调用.clear()
方法清除地图。
该程序的这一部分可以正常工作,但当我点击一个标记显示该地点的信息时,它只会显示一秒钟,因为触发了CameraChangeListener并再次刷新地图。
我想知道是否有办法阻止动画触发CameraChangeListener或一种方法来存储Hashmap中的所有位置。我只使用API,可以让您获得1个地图坐标的附近位置。
public GoogleMap.OnCameraChangeListener getCameraChangeListener()
{
return new GoogleMap.OnCameraChangeListener()
{
@Override
public void onCameraChange(CameraPosition cameraPosition)
{
double lat = cameraPosition.target.latitude;
double lng = cameraPosition.target.longitude;
String url = "http://www.mywebsite.com/location/?lat=" + lat + "&lng=" + lng;
new ParseJSON().execute(url);
}
}
};
public class ParseJSON extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
//Parse JSON of places and put it into a Hashmap
}
catch (JSONException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
mMap.clear(); //Clear map before placing new markers
//Current user viewable region of the map
LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
//Loop through hash map of Places
for(Places place : placesHash.values())
{
//If the Place is within the bounds of the screen
if (bounds.contains(new LatLng(place.lat, place.lng)))
{
MarkerOptions markerOptions = new MarkerOptions();
LatLng latLng = new LatLng(place.lat, place.lng);
markerOptions.position(latLng);
markerOptions.title(place.name);
mMap.addMarker(markerOptions);
System.out.println("marker added " + place.name);
}
}
答案 0 :(得分:1)
您可以不清除地图,而不是试图停止动画。
以下是如何实现可见缓存而不是清除地图的方法:
跟踪地图上当前显示的位置以及字典中的标记。如果地点在边界内,则只有在地形不存在于字典中时才添加新标记。如果地点超出范围,请检查字典以查看它是否有标记,如果是,请在标记上调用remove方法并从字典中删除该位置。
然后您将获得精彩的动画,信息窗口将按预期工作。