2012-10-25 40 views
12

Ho un ImageView. Nella sua onClick ottengo la sua Drawable:Copia profonda di un Drawable

Drawable dr = ((ImageView) v).getDrawable(); 

e impostarlo su ImageView di una finestra di dialogo:

zoomedImage.setImageDrawable(dr); 

Ma quando chiudo la finestra di dialogo o è ripreso l'attività. L'immagine nella posizione originale viene allungata e viene mostrata più grande delle sue dimensioni, il che porta a visualizzare solo una parte dell'immagine in ImageView.

Si tratta di un caso di copia profonda o c'è un altro problema? Se è così, come posso copiare in profondità il Drawable originale in modo che potessi impostare la copia su immagine ingrandita?

Grazie in anticipo.

risposta

26

Finalmente ci riesco! Ho avuto problema simile, quando ho usato filtro a colori sul mio drawable è cambiato il drawable, è molto vicino alla soluzione delle altre persone qui, ma solo questo ha funzionato per me:

Drawable drwNewCopy = dr.getConstantState().newDrawable().mutate(); 
+0

questo funziona per me .. – Neela

+1

FINALMENTE! Questa è la soluzione per creare una copia autonoma di un drawable. Per mutare() il drawable originale non è una buona soluzione, non sempre funziona. Creazione di una nuova copia dalla cache del drawable (vale a dire il getContantState()) funziona. Questo commento FYI per gli altri che hanno trascorso ore su ore su questa api immaturo/non finito. – carl

-3

Probabilmente si dovrebbe chiamare dr.clone e quindi chiamare mutate() sull'oggetto

Questo renderà il drawable non condivide qualsiasi stato

Drawable newdr = dr.clone(); 
newdr = newdr.mutate(); 

Edit: Forse solo

Drawable newdr = dr.mutate(); 

funzionerà. Provaci entrambi

+3

Mutate non copia una disegnabile. Restituisce lo stesso oggetto. E Drawable non ha 'clone()' – ernazm

1

Utilizzare BitmapFactory per convertire separatamente il drawable in bitmap o apportare modifiche.

9

sono riuscito a copiare il seguente codice utilizzando drawable:

drawable.mutate().getConstantState().newDrawable(); 

Qui mutate() rende mutevole drawable per evitare di condividere il suo stato, e getConstantState().newDrawable() crea una nuova copia.

Così diversi ImageView s utilizzano diversi drawable e non c'è stretching.

Problemi correlati