Android Volley显示SVG图像

时间:2015-03-20 08:48:39

标签: android android-volley networkimageview svg-android androidsvg

在我的Android应用程序中,我从我的网站下载文本内容并将其存储在我的mysql数据库中。现在我想从同一个网站下载和缓存图像。使用AndroidVolley的<com.android.volley.toolbox.NetworkImageView,下载普通图片效果非常好。但我想下载SVG矢量图像,缓存它们并显示在我的应用程序中。到目前为止,这在Android Volley中是不可能的......

我已经尝试使用AndroidVolley作为String下载SVG,然后将它们放在svg-android元素(See here)中,但svg-android从未显示我的图像。看来,它无法显示由Inkscape创建的SVG ......

有人知道一个简单的方法,如何下载这些文件并在视图中显示它们?

由于

//更新27.3.2015 //

所以这是我的解决方案: 使用Android Volley,我设置了一个StringRequest来访问我的SVG-Image作为字符串。 AndroidSVG库(不与svg-android库混淆)可以将此String转换为SVG-Object并将其放入SVGImageView - View中。以下是代码如何工作的示例:

            StringRequest stringRequest = new StringRequest("http://******/image.svg",new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        SVG svg = SVG.getFromString(response);
                        View view = getView();
                        if(view != null){
                            SVGImageView target = (SVGImageView)view.findViewById(catID);
                            target.setSVG(svg);
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(Globals.TAG,"Fehler "+error);
                }
            });
            RequestQueue queue = Volley.newRequestQueue(mContext);
            stringRequest.setShouldCache(true);
            queue.add(stringRequest);

非常感谢!

2 个答案:

答案 0 :(得分:1)

这是一个稍微不同的解决方案,因为我想将加载在变量中的图像存储多次以供重复使用。

所以我只是改变源Volley用“protected”代替“private”代替方法

//input[@placeholder = 'Enter Mobile Number or Name']/@id

然后我创建了一个继承自ImageRequest并使用AndroidSVG库的类。

protected Response <Bitmap> doParse (NetworkResponse response)

答案 1 :(得分:0)

您可以尝试两件事:

1。使用svg-android库,您需要设置

imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

让它发挥作用。

2. 如果第一种方法不起作用,您可以尝试使用SVGImageView