android:从networking加载svg文件并在图像视图中显示它

我想从网站加载SVG文件,并显示这个文件在ImageView上,对于普通PNG或其他图像文件,我使用毕加索图书馆有可能使用这个库的SVG文件? 有没有办法从网页加载SVG文件,并显示在图像视图? 我使用svgandroid库来显示svg文件,但是我不知道如何从网页获取svg图像所有的例子都使用本地文件。

Solutions Collecting From Web of "android:从networking加载svg文件并在图像视图中显示它"

请参考在Android中使用vector图像在真实设备上的问题。 SVG-机器人

在用户post中,他问了一个类似的问题,并build议他使用:

在布局文件中为ImageView创build一个成员variables;

 private ImageView mImageView; // intialize in onCreate(Bundle savedInstanceState) mImageView = (ImageView) findViewById(R.id.image_view); 

下载图像

 private class HttpImageRequestTask extends AsyncTask<Void, Void, Drawable> { @Override protected Drawable doInBackground(Void... params) { try { final URL url = new URL("http://upload.wikimedia.org/wikipedia/commons/e/e8/Svg_example3.svg"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = urlConnection.getInputStream(); SVG svg = SVGParser. getSVGFromInputStream(inputStream); Drawable drawable = svg.createPictureDrawable(); return drawable; } catch (Exception e) { Log.e("MainActivity", e.getMessage(), e); } return null; } @Override protected void onPostExecute(Drawable drawable) { // Update the view updateImageView(drawable); } } 

然后将绘图应用到Imageview

 @SuppressLint("NewApi") private void updateImageView(Drawable drawable){ if(drawable != null){ // Try using your library and adding this layer type before switching your SVG parsing mImageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); mImageView.setImageDrawable(drawable); } } 

SVGParser可在https://github.com/pents90/svg-android上find

更新:对于较新的版本,请检查Glide示例( https://github.com/bumptech/glide/tree/master/samples/svg

您可以使用Glide( https://github.com/bumptech/glide/tree/v3.6.0 )和AndroidSVG( https://bitbucket.org/paullebeau/androidsvg )。

还有一个来自Glide的示例: https : //github.com/bumptech/glide/tree/v3.6.0/samples/svg/src/main/java/com/bumptech/svgsample/app

安装GenericRequestBuilder

 requestBuilder = Glide.with(mActivity) .using(Glide.buildStreamModelLoader(Uri.class, mActivity), InputStream.class) .from(Uri.class) .as(SVG.class) .transcode(new SvgDrawableTranscoder(), PictureDrawable.class) .sourceEncoder(new StreamEncoder()) .cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder())) .decoder(new SvgDecoder()) .placeholder(R.drawable.ic_facebook) .error(R.drawable.ic_web) .animate(android.R.anim.fade_in) .listener(new SvgSoftwareLayerSetter<Uri>()); 

和uri一起使用RequestBuilder

 Uri uri = Uri.parse("https://de.wikipedia.org/wiki/Scalable_Vector_Graphics#/media/File:SVG_logo.svg"); requestBuilder .diskCacheStrategy(DiskCacheStrategy.SOURCE) // SVG cannot be serialized so it's not worth to cache it .load(uri) .into(mImageView); 

使用这个Glide based library加载xml

添加依赖关系

  compile 'com.github.ar-android:AndroidSvgLoader:1.0.0' 

main.xml中

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/ivimage" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

MainActivity.java

 public class MainActivity extends AppCompatActivity { private ImageView image; private String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_item); url = "http://www.clker.com/cliparts/u/Z/2/b/a/6/android-toy-h.svg"; image = (ImageView) findViewById(R.id.ivimage); SvgLoader.pluck() .with(this) .setPlaceHolder(R.mipmap.ic_launcher, R.mipmap.ic_launcher) .load(url, image); } @Override protected void onDestroy() { super.onDestroy(); SvgLoader.pluck().close(); } }