Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
用AndroidSVG和通用图像加载器解码SVG_Android_Svg_Androidsvg - Fatal编程技术网

用AndroidSVG和通用图像加载器解码SVG

用AndroidSVG和通用图像加载器解码SVG,android,svg,androidsvg,Android,Svg,Androidsvg,我正在尝试用uil显示SVG。我使用androidsvg()编写了自己的图像解码器,如下所示: public class SVGImageDecoder implements ImageDecoder { @Override public Bitmap decode(ImageDecodingInfo imageDecodingInfo) throws IOException { Bitmap decodedBitmap = null; InputStream inputSt

我正在尝试用uil显示SVG。我使用androidsvg()编写了自己的图像解码器,如下所示:

public class SVGImageDecoder implements ImageDecoder {

@Override
public Bitmap decode(ImageDecodingInfo imageDecodingInfo) throws IOException {
    Bitmap decodedBitmap = null;

    InputStream inputStream = getImageStream(imageDecodingInfo);
    SVG svg = null;
    try {
        svg = SVG.getFromInputStream(inputStream);
    } catch (SVGParseException e) {
        e.printStackTrace();
    }
    Picture picture = svg.renderToPicture();
    PictureDrawable pictureDrawable = new PictureDrawable(picture);
    decodedBitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(),
            pictureDrawable.getIntrinsicHeight(), Bitmap.Config.RGB_565);
    Canvas canvas = new Canvas(decodedBitmap);
    // Clear background to white
    canvas.drawRGB(255, 255, 255);
    svg.renderToCanvas(canvas);
    return decodedBitmap;
}

protected InputStream getImageStream(ImageDecodingInfo decodingInfo) throws IOException {
    return decodingInfo.getDownloader().getStream(decodingInfo.getImageUri(), decodingInfo.getExtraForDownloader());
}
}
01-06 23:48:15.310 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2048K, 10% free 26540K/29187K, paused 1ms+29ms 01-06 23:48:15.645 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2046K, 10% free 26541K/29187K, paused 2ms+27ms 01-06 23:48:15.970 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2047K, 10% free 26542K/29187K, paused 1ms+28ms 01-06 23:48:16.305 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2049K, 10% free 26541K/29187K, paused 2ms+29ms 01-06 23:48:16.650 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2051K, 10% free 26538K/29187K, paused 1ms+27ms 显示SVG,但出现以下问题:

1.)不渲染和显示颜色和图片 2.)渲染时间过长,logcat显示如下内容:

public class SVGImageDecoder implements ImageDecoder {

@Override
public Bitmap decode(ImageDecodingInfo imageDecodingInfo) throws IOException {
    Bitmap decodedBitmap = null;

    InputStream inputStream = getImageStream(imageDecodingInfo);
    SVG svg = null;
    try {
        svg = SVG.getFromInputStream(inputStream);
    } catch (SVGParseException e) {
        e.printStackTrace();
    }
    Picture picture = svg.renderToPicture();
    PictureDrawable pictureDrawable = new PictureDrawable(picture);
    decodedBitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(),
            pictureDrawable.getIntrinsicHeight(), Bitmap.Config.RGB_565);
    Canvas canvas = new Canvas(decodedBitmap);
    // Clear background to white
    canvas.drawRGB(255, 255, 255);
    svg.renderToCanvas(canvas);
    return decodedBitmap;
}

protected InputStream getImageStream(ImageDecodingInfo decodingInfo) throws IOException {
    return decodingInfo.getDownloader().getStream(decodingInfo.getImageUri(), decodingInfo.getExtraForDownloader());
}
}
01-06 23:48:15.310 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2048K, 10% free 26540K/29187K, paused 1ms+29ms 01-06 23:48:15.645 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2046K, 10% free 26541K/29187K, paused 2ms+27ms 01-06 23:48:15.970 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2047K, 10% free 26542K/29187K, paused 1ms+28ms 01-06 23:48:16.305 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2049K, 10% free 26541K/29187K, paused 2ms+29ms 01-06 23:48:16.650 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2051K, 10% free 26538K/29187K, paused 1ms+27ms 01-06 23:48:15.310 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_并发释放2048K,10%释放26540K/29187K,暂停1ms+29ms 01-06 23:48:15.645 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_并发释放2046K,10%释放26541K/29187K,暂停2ms+27ms 01-06 23:48:15.970 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_并发释放2047K,10%释放26542K/29187K,暂停1ms+28ms 01-06 23:48:16.305 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_并发释放2049K,10%释放26541K/29187K,暂停2ms+29ms 01-06 23:48:16.650 15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_并发释放2051K,10%释放26538K/29187K,暂停1ms+27ms
那么,我如何提高性能并解决问题呢?有没有更好的方法将SVG与uil集成?

您的SVG基本上只包含一个引用整个页面的大型外部图像的
元素。这并不是以最好的方式使用SVG

无论如何,你的问题的答案如下:

您的图像未显示的原因是AndroidSVG不知道在哪里可以找到它。您必须创建SVGExternalFileResolver类的实现,并使用registerExternalFileResolver()方法将其传递给SVG

在SVGExternalFileResolver的实现中,需要重写resolveImage()方法。当渲染需要打印图像时,它将从SVG文件(在本例中为“page_0001_img68.png”)传入文件名,您必须加载和解码png并传回位图对象