Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在nutiteq上绘制标记时位图大小超过32位_Android_Bitmap_Nutiteq - Fatal编程技术网

Android 在nutiteq上绘制标记时位图大小超过32位

Android 在nutiteq上绘制标记时位图大小超过32位,android,bitmap,nutiteq,Android,Bitmap,Nutiteq,我正在我的android应用程序中创建动态地图标记,但有时我会遇到带有相同logcat错误的MemoryError和IllegalArgumentException。下面是我绘制多个标记的代码 for (int i = 0; i < lats.size(); i++) { // draw marker Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.dra

我正在我的android应用程序中创建动态地图标记,但有时我会遇到带有相同logcat错误的MemoryError和IllegalArgumentException。下面是我绘制多个标记的代码

for (int i = 0; i < lats.size(); i++) {
        // draw marker
        Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place);
        MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build();

        // define custom label
        try {
            Label markerLabel = new DefaultLabel("", data.get(i));
            // define map location marker, convert to base map coordinate
            MapPos position = maplayer.getProjection().fromWgs84(Double.parseDouble(lngs.get(i)), Double.parseDouble(lats.get(i)));

            // add marker to the current map layer
            markerLayer = new MarkerLayer(maplayer.getProjection());
            marker = new Marker(position, markerLabel, markerStyle, markerLayer);
            markerLayer.add(marker);
            mapView.getLayers().addLayer(markerLayer);
        } catch (Exception e) {
            Log.d("Error Marker", e.getMessage() + " " + e.getCause());
        } catch (OutOfMemoryError e){
            Toast.makeText(getApplicationContext(), "OutOfMemory " + e.getMessage() + " " + e.getCause(), Toast.LENGTH_LONG).show();
            Log.d("OutOfMemory", e.getMessage() + " " + e.getCause());
        }
    }

有人有这种经历吗?我将感谢任何帮助。谢谢。

您对每个标记都进行了大量位图复制,为什么不将这些行放在前面,并对标记使用相同的位图和样式

        Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place);
        MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build();
您甚至可以为每个标记创建新图层,因此请在之前添加以下行:

     markerLayer = new MarkerLayer(maplayer.getProjection());
     mapView.getLayers().addLayer(markerLayer);
因此,代码应该是:

    Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place);
    MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build();

    markerLayer = new MarkerLayer(maplayer.getProjection());
    mapView.getLayers().addLayer(markerLayer);

    for (int i = 0; i < lats.size(); i++) {
        // draw marker
        // define custom label
        try {
           Label markerLabel = new DefaultLabel("", data.get(i));
           // define map location marker, convert to base map coordinate
           MapPos position = maplayer.getProjection().fromWgs84(Double.parseDouble(lngs.get(i)), Double.parseDouble(lats.get(i)));

            // add marker to the current map layer
            marker = new Marker(position, markerLabel, markerStyle, markerLayer);
            markerLayer.add(marker);
        } catch (Exception e) {
            Log.d("Error Marker", e.getMessage() + " " + e.getCause());
        } catch (OutOfMemoryError e){
            Toast.makeText(getApplicationContext(), "OutOfMemory " + e.getMessage() + " " + e.getCause(), Toast.LENGTH_LONG).show();
            Log.d("OutOfMemory", e.getMessage() + " " + e.getCause());
        }
    }
    Bitmap markerBitmap = UnscaledBitmapLoader.decodeResource(getResources(), R.drawable.ic_place);
    MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(markerBitmap).setSize(0.5f).setColor(Color.RED).build();

    markerLayer = new MarkerLayer(maplayer.getProjection());
    mapView.getLayers().addLayer(markerLayer);

    for (int i = 0; i < lats.size(); i++) {
        // draw marker
        // define custom label
        try {
           Label markerLabel = new DefaultLabel("", data.get(i));
           // define map location marker, convert to base map coordinate
           MapPos position = maplayer.getProjection().fromWgs84(Double.parseDouble(lngs.get(i)), Double.parseDouble(lats.get(i)));

            // add marker to the current map layer
            marker = new Marker(position, markerLabel, markerStyle, markerLayer);
            markerLayer.add(marker);
        } catch (Exception e) {
            Log.d("Error Marker", e.getMessage() + " " + e.getCause());
        } catch (OutOfMemoryError e){
            Toast.makeText(getApplicationContext(), "OutOfMemory " + e.getMessage() + " " + e.getCause(), Toast.LENGTH_LONG).show();
            Log.d("OutOfMemory", e.getMessage() + " " + e.getCause());
        }
    }