映射android v2 - clear()方法的问题

时间:2015-03-06 05:37:31

标签: java android google-maps-android-api-2

我创建了一个使用谷歌地图的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);
            }
    }

1 个答案:

答案 0 :(得分:1)

您可以不清除地图,而不是试图停止动画。

以下是如何实现可见缓存而不是清除地图的方法:

跟踪地图上当前显示的位置以及字典中的标记。如果地点在边界内,则只有在地形不存在于字典中时才添加新标记。如果地点超出范围,请检查字典以查看它是否有标记,如果是,请在标记上调用remove方法并从字典中删除该位置。

然后您将获得精彩的动画,信息窗口将按预期工作。