Autore Topic: Corretto dimensionamento drawable in ImageView  (Letto 323 volte)

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 596
  • Respect: +133
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Corretto dimensionamento drawable in ImageView
« il: 13 Gennaio 2015, 15:43:59 CET »
0
Ciao a tutti,

basandomi su questo esempio ho realizzato una mia versione di AsyncDrawable per caricare immagini in modo asincrono.

La mia versione funziona un po' come un "LevelListDrawable": inizialmente contiene un'immagine predefinita trasparente, ma quando il caricamento dell'immagine corretta (che avviene asincronamente) è completo, questa prende il posto di quella predefinita.

In pratica si tratta di un wrapper di un Drawable, e quello che faccio è cambiare l'immagine incapsulata una volta caricata.

Tutto funziona egregiamente tranne la proprietà android:scaleType dell'ImageView che contiene l'AsyncDrawable. Qualsiasi valore definisco si comporta come "fitXY".

La cosa strana è che se faccio sparire l'ImageView (setVisibility(View.GONE)) e poi la faccio riapparire senza ricaricare il drawable, quando riappare l'immagine ha l'aspetto congruo con lo scaleType che ho definito nel layout.

Molto probabilmente si tratta di avvertire l'ImageView che le proprietà del suo Drawable sono cambiate, ma non sono sicuro di come fare: ho provato con invalidate(), postInvalidate(), invalidateDrawable(), ma senza successo.

C'è qualche altro modo per richiedere all'ImageView di rielaborare il drawable che contiene?
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 596
  • Respect: +133
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Corretto dimensionamento drawable in ImageView
« Risposta #1 il: 18 Gennaio 2015, 12:45:08 CET »
0
Studiando il codice di ImageView ho visto che in pratica non è possibile senza usare degli "hack".

In pratica l'ImageView legge le dimensioni del Drawable solo quando gli viene (ri)assegnato o quando viene invocato il metodo interno "resizeFromDrawable".

Fortunatamente questo metodo interno è usato anche dal metodo setSelected, di conseguenza per avvertire l'ImageView che il Drawable è cambiato ho usato:

Codice (Java): [Seleziona]
imageView.setSelected(imageView.isSelected());
In alternativa è anche possibile eliminare e riassegnare il Drawable:

Codice (Java): [Seleziona]
imageView.setImageDrawable(null);
imageView.setImageDrawable(asyncDrawable);
« Ultima modifica: 18 Gennaio 2015, 13:18:05 CET da Ohmnibus »
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Corretto dimensionamento drawable in ImageView
« Risposta #2 il: 18 Gennaio 2015, 13:40:40 CET »
0
mi viene un dubbio, ma perchè non hai usato picasso? picasso ti permette di definire l'immagine di default (pre download) e anche di errore in caso di download, senza diventare matto...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 596
  • Respect: +133
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Corretto dimensionamento drawable in ImageView
« Risposta #3 il: 18 Gennaio 2015, 14:06:46 CET »
0
Perché non si uccidono le zanzare con i lanciagranate :D

Da quel che ho potuto vedere Picasso è un progetto validissimo, ma nel mio caso si tratta di caricare un'immagine di sfondo e delle icone da memoria interna. Di fatto avrei potuto risolvere tutto in modo sincrono senza sensibili perdite di performance.

Più che altro mi interessava affrontare ed approfondire il problema dei caricamenti asincroni.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.