2014-05-15 23 views
63

Posso usare la libreria Picasso per caricare immagini dal filesystem?Picasso Carica immagine dal filesystem

Sto usando startActivityForResult per consentire all'utente di scegliere una foto dalla sua galleria e quindi desidera mostrare l'immagine selezionata.

Ho già un codice funzionante per ottenere il file system dell'immagine Uri, ma non riesco a far funzionare il metodo Picasso.load().

risposta

120

Certo che puoi. Il suo in realtà piuttosto semplice:

File f = new File("path-to-file/file.png") 

o

File f = new File(uri) 

Picasso.with(getActivity()).load(f).into(imageView); 

anche

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

funziona

+8

Non so se si tratta di un formato URI "specifico" che Picasso richiede per caricare le immagini dal file system (in formato String). Ma ho usato quello restituito da ActivityResult e non ha funzionato fino a quando non ho passato direttamente un oggetto File, invece della stringa. – Gonan

+6

Sto cercando di farlo ma questo non funziona, ho un File da un'altra attività nella cache della mia app ma Picasso non lo carica ... – Loenix

21

Sì, è possibile.

Prova:

Picasso.with(context).load(new File(YOUR_FILE_PATH)).into(imageView); 

EDIT

Si può anche chiamare .load(YOUR_URI) invece pure.

+0

Grazie per avermelo ricordato di nuovo .. –

18

Guardando nel codice sorgente ho anche scoperto che è possibile caricare l'immagine dal file system aggiungendo il prefisso di stringa file: al percorso dell'immagine. Per esempio:

file:path/to/your/image 

Inoltre, quando si utilizza startSubActivity, si otterrà qualcosa di simile:

Uri imageContent = data.getData(); 

Quindi, è possibile chiamare Picasso.with(getContext()).load(imageContent.toString).into(imageView); direttamente senza bisogno di creare un Cursor e l'interrogazione per il percorso dell'immagine.

+2

Grazie, il mio non ha funzionato fino a quando non ho visto la tua risposta che il "file" : "è necessario il prefisso – henry000

+0

Non so perché non funzioni. C'è il mio percorso - "file: /storage/emulated/0/Android/data/com.fittingroom.newtimezone/files/default/AvatarPackage/DEFAULT_MY_AVATAR/pose1.jpeg", ma qualsiasi risultato ( –

+1

@AlekseyTimoshchenko dovrebbe iniziare con ' file: // '. Il tuo Uri manca il secondo'/'. – Sufian

2

Fondamentalmente abbiamo bisogno di tre cose, Context, image´s path e il ImageView Container

Picasso.with(context).load("/files/my_image.jpg").into(myImageView); 

ma possiamo fare uso di più opzioni:

.resize(20, 20) 
    .centerCrop() 
    .placeholder(R.drawable.user_placeholder) 
    .error(R.drawable.user_placeholder_error) 

ecc ...

più informazioni : http://square.github.io/picasso/

6

Prova questa:

Picasso.with(context) 
.load("file://"+path) // Add this 
.config(Bitmap.Config.RGB_565) 
.fit().centerCrop() 
.into(imageView); 

Funziona perfetto per me.

+0

mh, userei RGB_8888 a meno che tu non abbia problemi con vincoli di memoria dovuti all'immagine che è veramente grande – Zharf

+0

Voglio dire ARGB_8888 ... – Zharf

Problemi correlati