放大/缩小时,地图渲染速度有点慢

时间:2017-12-12 17:54:37

标签: android google-maps

我需要一些帮助才能提高算法的性能,我已经挣扎了几天而无法找到一个好的解决方案。

目标:我的应用需要显示世界上每个机场的标记(~1k标记),每个标记必须显示机场名称。

我做了什么:对于标记,我使用Icon创建了一个RelativeLayout,并使用TextView填充了aiport的名称。
另外,我写了一个课程" AirportCluster"扩展 DefaultClusterRenderer 并在overrode方法中 onBeforeClusterItemRendered 我只是将布局转换为Bitmap,以便可以在地图上呈现

@Override
protected void onBeforeClusterItemRendered(AirportItem airportItem, MarkerOptions markerOptions) {

     RelativeLayout customLayoutMarker = (RelativeLayout) activity.getLayoutInflater().inflate(R.layout.custom_airport_marker,null);

     String tAirportName = airportItem.getAirport().getAirportName().toLowerCase();
     tAirportName = Character.toUpperCase(tAirportName.charAt(0)) + tAirportName.substring(1);

     TextView textLabelAirportMarker = (TextView) customLayoutMarker.findViewById(R.id.label_text_airport_marker);
     textLabelAirportMarker.setText(tAirportName);

     customLayoutMarker.setDrawingCacheEnabled(true);
     customLayoutMarker.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
     customLayoutMarker.layout(0,0, customLayoutMarker.getMeasuredWidth(), customLayoutMarker.getMeasuredHeight());
     customLayoutMarker.buildDrawingCache(true);

    Bitmap flagBitmap;
    if ( mMemoryCache.get(tAirportName) == null){
        flagBitmap = Bitmap.createBitmap(customLayoutMarker.getDrawingCache());
        mMemoryCache.put(tAirportName,flagBitmap);
     }else{
        flagBitmap = mMemoryCache.get(tAirportName);
    }

     BitmapDescriptor markerAirportWithText = BitmapDescriptorFactory.fromBitmap(flagBitmap);
     markerOptions.icon(markerAirportWithText);
    //markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.airport_marker));
}

正如我们在代码中看到的那样,我也试图将其缓存在内存中,但这并没有那么好用。
所有标记都添加到列表中每个机场的循环内的 onMapReady 方法

for (Airport temp : fixedAirports) {
        LatLng latLng = new LatLng(temp.getCityLat(), temp.getCityLng());
        // create marker
        MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("Marker in" + temp.getCityName());

        markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.airport_marker));

        AirportItem offsetItem = new AirportItem(temp.getCityLat(), temp.getCityLng());
        offsetItem.setAirport(temp);
        mClusterManager.addItem(offsetItem);
    }

问题:我也为群集机场设置了自定义图像,当我尝试放大/缩小时,有时需要对群集图标进行大量关闭并显示机场的标记项,有时,项目的图标甚至会与群集图标重叠,就像下面的图像一样。

clustered airports markers zomming out clustered airports markers

我要对这些动画做些什么(从单个标记的聚集图标更改)更快更顺畅?

0 个答案:

没有答案