Android: загрузить svg файл из Интернета и показать его на изображении
Я хочу загрузить svg файл из Интернета и показать этот файл на imageView, для обычного png или других файлов изображений я использую Picasso библиотеку
можно ли использовать эту библиотеку для svg файлов? это любой способ загрузить svg файл из Интернета и показать его на изображении? Я использую svg-android библиотеку для отображения svg файлов, но я не знаю, как получить svg-изображение из Интернета. Все примеры используют локальные файлы.
Ответы
Ответ 1
Обращайтесь к с выпуском на реальном устройстве с использованием векторного изображения в android. SVG-андроид
В сообщениях пользователей он задает аналогичный вопрос и предлагает использовать:
Создайте переменную-член для ImageView в вашем файле макета;
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);
}
}
Затем примените 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
Ответ 2
Обновление: для более новой версии, пожалуйста, ознакомьтесь с Glide Samples (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>());
Используйте RequestBuilder с URI
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 not worth to cache it
.load(uri)
.into(mImageView);
Ответ 3
Используйте эту Glide based library
загружающую xml
Добавить зависимость
compile 'com.github.ar-android:AndroidSvgLoader:1.0.0'
для последней зависимости от Android Gradle используйте это вместо
implementation '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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item);
ImageView image = (ImageView) findViewById(R.id.ivimage);
SvgLoader.pluck()
.with(this)
.setPlaceHolder(R.mipmap.ic_launcher, R.mipmap.ic_launcher)
.load("http://www.clker.com/cliparts/u/Z/2/b/a/6/android-toy-h.svg", image);
}
@Override protected void onDestroy() {
super.onDestroy();
SvgLoader.pluck().close();
}
}
Ответ 4
Вы можете использовать эту библиотеку
https://github.com/2coffees1team/GlideToVectorYou
Как он сказал: "Библиотека основана на Glide и предлагает те же функции + поддержка SVG".