web-dev-qa-db-fra.com

Picasso charge les ressources dessinables à partir de son URI

Je dois montrer un drawable de res dans un ImageView. Dans cette application, j'utilise Picasso pour plusieurs raisons.

Dans ce cas, je dois charger le drawable en utilisant son URI et non son id. Pour ce faire, voici mon code:

uri = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://"+context.getPackageName()+"/drawable/" + drawableName);

où drawableName utilisé ici sont des noms de fichier plutôt que leurs identifiants de ressource.

Ensuite

Picasso.with(context).load(uri).into(imageView);

Je sais pour sûr que le nom tirable est correct, mais Picasso semble qu'il n'aime pas cet uri.

38
Daniele Vitali

J'ai trouvé la réponse. Malheureusement, Picasso n'autorise pas le chargement dessinable via l'URI. C'est une fonctionnalité entrante.

8
Daniele Vitali

Si les images se trouvent dans votre dossier dessinable, vous pouvez simplement le charger.

Picasso.with(context).load(R.drawable.drawableName).into(imageView);

et picasso le chargera sans avoir besoin d'un Uri.

76
Aegis
  • C'est si vous ne voulez pas coder en dur l'image que vous allez charger ...

Vous pouvez paresseusement charger des fichiers d'image locaux à partir de votre dossier dessinable si vous connaissez la valeur entière de l'image que vous souhaitez charger.

Ensuite, vous pouvez simplement faire:

Picasso.with(getContext()).load(imageResourceId)
.error(R.drawable.ic_launcher)
.into(imageView);

imageView

est la vue que vous souhaitez afficher l'image. Par exemple:

imageView = (ImageView) convertView
.findViewById(R.id.itemImage);

Et où

imageResourceId

est la valeur entière du dessinable. Vous pouvez récupérer cette valeur entière en:

int productImageId = resources.getIdentifier(
productImageName, "drawable", context.getPackageName());

aussi bien que

productImageName

est le nom du dessin que vous souhaitez dessiner (c'est-à-dire "ic_launcher")

CELA PEUT TOUT ÊTRE FAIT À L'INTÉRIEUR DE L'ADAPTATEUR

9
RheeBee

De picasso v2 + voici une grosse modification. La nouvelle version est très utile pour gérer les données du cache d'images. Il utilise l'instance Singleton.

[~ # ~] gradle [~ # ~]

implementation 'com.squareup.picasso:picasso:2.71828'

Définir une image dessinable

Picasso.get()
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

Bonus, dessinez par nom:

public static int getDrawableIdFromFileName(Context context, String nameOfDrawable) {
        return context.getResources().getIdentifier(nameOfDrawable, "drawable", context.getPackageName());
}
6
Md Imran Choudhury

Comme mentionné dans la documentation de Picasso .

ils prennent désormais en charge le chargement de l'image à partir de l'URI comme suit:

load(Android.net.Uri uri) 

vous devez donc faire quelque chose comme ceci:

Picasso.with(context).load(uri).into(imageView); 

comme ce que vous faites déjà.

J'espère que ça t'as aidé .

6
user957654