46

I have to show a drawable from res into an ImageView. In this app, I'm using Picasso for some reasons.

In this case, I need to load the drawable using its URI and not its id. To do that, here is my code:

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

where drawableName used here are file names rather than their resource ids.

Then

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

I know for sure that drawable name is correct, but Picasso seems it does not like this uri.

Abhinav Saxena
  • 1,990
  • 2
  • 24
  • 55
Daniele Vitali
  • 3,848
  • 8
  • 48
  • 71

5 Answers5

88

If the images is in your drawable folder then you can just load it.

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

and picasso will load it no need for an Uri.

Aegis
  • 5,761
  • 2
  • 33
  • 42
9

Found the answer. Unfortunately, Picasso do not allow drawable loading via URI. It is an incoming feature.

Daniele Vitali
  • 3,848
  • 8
  • 48
  • 71
9
  • This is if you don't want to hardcode the image that you are going to load...

You can load local image files from your drawable folder lazily if you know the integer value of the image that you want to be loaded.

Then you can just do:

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

Where

imageView

is the view you wish to display the image. For example:

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

And where

imageResourceId

is the integer value of the drawable. You can retrieve this integer value by:

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

as well as

productImageName

is the name of the drawable you want to draw (i.e. "ic_launcher")

THIS CAN ALL BE DONE INSIDE FROM THE ADAPTER

Abhinav Saxena
  • 1,990
  • 2
  • 24
  • 55
RheeBee
  • 195
  • 2
  • 11
  • You can put images in drawable or mipmap. Generally drawable folder is good for keeping xml for shapes, selectors and backgrounds. You can also put 9 patch images in drawable folder. A 9 patch will not be recognised from the mipmap folders. mipmap folder is strictly for the images. This way you categorise, organise and keep from mixing your image resources. – Abhinav Saxena Jan 02 '19 at 05:57
  • Answer is just above this name: https://www.journaldev.com/13759/android-picasso-tutorial#android-picasso-8211-loading-image-from-file – Abhinav Saxena Jan 02 '19 at 06:03
  • with() method is deprecated now, use Picasso.get().load(imageResourceId).into(imageView) – Roman Gherta Mar 31 '19 at 00:30
8

From picasso v2+ here is a big modification. The new version is very helpful in order to manage image cache data. It's using Singleton Instance.

GRADLE

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

Set drawable image

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

Bonus, get drawable by name:

public static int getDrawableIdFromFileName(Context context, String nameOfDrawable) {
        return context.getResources().getIdentifier(nameOfDrawable, "drawable", context.getPackageName());
}
Abhinav Saxena
  • 1,990
  • 2
  • 24
  • 55
Md Imran Choudhury
  • 9,343
  • 4
  • 62
  • 60
6

As mentioned in the documentation of Picasso .

they are now supporting loading Image from URI like the following :

load(android.net.Uri uri) 

so you have to do something like the following :

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

just like what you are doing already .

Hopethat helps .

Community
  • 1
  • 1
  • ok what about this ? http://square.github.io/picasso/javadoc/com/squareup/picasso/Picasso.html#load(android.net.Uri) –  Jan 28 '14 at 09:23
  • 2
    That method works for every URIs except the ones whose point to an internal resource (such as a drawable). Ie: `Uri.parse("http://website.com/image.jpg")` is a valid URI for Picasso. But Picasso is not able to load a drawable with `Uri.parse("android.resource://your_drawable")`. As they said, this feature will be available for Picasso 2.2+ – Daniele Vitali Jan 28 '14 at 09:31
  • 3
    Leave it.. there could be other people with your same doubt :) – Daniele Vitali Jan 28 '14 at 10:14