web-dev-qa-db-fra.com

android: charger le fichier svg à partir du Web et l'afficher en mode d'affichage d'image

je veux charger un fichier svg à partir du Web et l'afficher sur un fichier imageView, que ce soit pour un fichier png ou autre, j'utilise Picasso bibliothèque Est-il possible d'utiliser cette bibliothèque pour les fichiers svg? y at-il un moyen de charger le fichier svg à partir du Web et de l'afficher en mode d'affichage d'image? J'utilise svg-Android library pour les fichiers show svg mais je ne sais pas comment obtenir une image svg à partir du Web. Tous les exemples utilisent des fichiers locaux.

24
mahdi

Veuillez vous référer à Avoir un problème sur Real Device en utilisant une image vectorielle dans Android. SVG-Android

Dans le post des utilisateurs, il pose une question similaire et suggère d'utiliser:

Créez une variable membre pour ImageView dans votre fichier de mise en page;

private ImageView mImageView;

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

Télécharger l'image

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);
    }
}

Ensuite, appliquez le dessinable à la 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 est disponible sur https://github.com/pents90/svg-Android

9
kandroidj

Mise à jour: pour les versions plus récentes, vérifiez les exemples de Glide ( Https://github.com/bumptech/glide/tree/master/samples/svg )

-

Vous pouvez utiliser Glide ( https://github.com/bumptech/glide/tree/v3.6.0 ) et AndroidSVG ( https://bitbucket.org/paullebeau/androidsvg ).

Il existe également un exemple de Glide: https://github.com/bumptech/glide/tree/v3.6.0/samples/svg/src/main/Java/com/bumptech/svgsample/app

Installer 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>());

Utiliser RequestBuilder avec 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's not worth to cache it
                    .load(uri)
                    .into(mImageView);
37
Rags93

Utilisez ce Glide based library loading xml

Ajouter une dépendance

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

pour la dernière dépendance Android, Gradle l'utilise à la place

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();
    }
}
8
Ramesh sambu

Vous pouvez utiliser cette bibliothèque 

https://github.com/2coffees1team/GlideToVectorYou

Comme il le dit: "La bibliothèque est basée sur Glide et offre les mêmes fonctionnalités + support svg".

0
Ali hasan