2010-08-30 14 views
6

Sto tentando di visualizzare un'immagine da un URL, che potrebbe essere più grande delle dimensioni dello schermo. Ho un po 'di lavoro, ma mi piacerebbe che fosse scalabile per adattarsi allo schermo, e ho anche problemi quando l'orientamento dello schermo cambia. L'immagine è minuscola e mi piacerebbe che ridimensionasse anche la sua larghezza sullo schermo. (In entrambi i casi, mi piace l'immagine per riempire la larghezza dello schermo con barre di scorrimento (se necessario per l'altezza)Visualizza l'immagine dall'URL: problemi di ridimensionamento e orientamento dello schermo

Ecco il mio ImageView:.

<ImageView android:id="@+id/ImageView01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:scaleType="fitCenter" 
    android:adjustViewBounds="true"> 
</ImageView> 

Ecco il codice java che carica l'immagine: (un po 'di codice di gestione degli errori rimosso per semplicità)

Object content = null; 
    try{ 
     URL url = new URL("http://farm1.static.flickr.com/150/399390737_7a3d508730_b.jpg"); 
     content = url.getContent(); 
    } 
     catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    InputStream is = (InputStream)content; 
    Drawable image = Drawable.createFromStream(is, "src"); 
    Image01.setImageDrawable(image); 

ho provato diverse impostazioni per Android:.. scaleType mi dispiace se questa domanda è stato chiesto prima di aver passato attraverso una serie di tutorial sul tema , ma non sembrano funzionare per me. Non sono sicuro che abbia qualcosa g fare con il modo in cui l'immagine viene caricata. (dal web invece di una risorsa locale)

Un altro problema è che a volte l'immagine non viene nemmeno caricata. Non ci sono errori di runtime, non ottengo nulla in ImageView.

Per favore fatemi sapere se avete bisogno di maggiori informazioni o chiarimenti.

risposta

9

la questione su che "a volte l'immagine non ha nemmeno caricare" è legato al contesto così ho usato questa funzione per risolvere tale questione

public Object fetch(String address) throws MalformedURLException, 
    IOException { 
     URL url = new URL(address); 
     Object content = url.getContent(); 
     return content; 
    } 

    private Drawable ImageOperations(Context ctx, String url) { 
     try { 
      InputStream is = (InputStream) this.fetch(url); 
      Drawable d = Drawable.createFromStream(is, "src"); 
      return d; 
     } catch (MalformedURLException e) { 
      return null; 
     } catch (IOException e) { 
      return null; 
     } 
    } 

in modo da riempire la larghezza dello schermo con la vostra immagine è necessario avere un codice come questo

try{ 
     String url = "http://farm1.static.flickr.com/150/399390737_7a3d508730_b.jpg";   
     Drawable image =ImageOperations(this,url); 
     Image01.setImageDrawable(image); 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 


    Image01.setMinimumWidth(width); 
    Image01.setMinimumHeight(height); 

    Image01.setMaxWidth(width); 
    Image01.setMaxHeight(height); 

UPDATE :: se si carica un immagini grandi dimensioni, ovviamente, si dovrà attendere più tempo, e scarica i problemi potrebbero essere causati per UnknowHostException.

sì hai ragione si salverà l'immagine localmente, l'accesso locale è più veloce del download.

per evitare problemi in materia di cambiamento di rotazione impostare la configChanges = "keyboardHidden | orientamento" proprietà all'interno del vostro Manifest.xml

<activity android:name=".myActivity" 
... 
     android:configChanges="keyboardHidden|orientation" > 
... 
/> 
+0

Grazie per l'aiuto con la larghezza minima e massima. Questo ha fatto il trucco, anche se ho dovuto inserire l'ImageView all'interno di una ScrollView se l'impostazione della larghezza ha causato il superamento dell'altezza disponibile dell'immagine. – RMS2

+0

Ora, per quanto riguarda l'immagine che non si sta scaricando, (ho usato il codice di Joregsys) sto incontrando tutti i tipi di problemi. Sembra che quando l'immagine non viene visualizzata, ciò che sta accadendo è che sto ricevendo l'errore "SkImageDecoder :: Factory restituito null" quando si esegue il metodo .createFromStream. A volte funziona e a volte lo capisco. Ho provato a chiudere InputStream per svuotare il buffer, ma non andare. Ho provato a racchiudere queste righe di codice in un ciclo while (d == null), ma poi ho appena ottenuto un ciclo infinito. – RMS2

+0

Ho anche problemi di memoria quando ruoto lo schermo. Se l'immagine viene caricata per la prima volta, otterrò un OutOfMemoryError quando cambi di orientamento. L'immagine è 1MB - piccola in termini di una foto digitale, ma forse è troppo grande per Android? Penso che sto ricevendo perdite di memoria. Ho provato Image01.getDrawable(). SetCallback (null); nell'attività onDestroy(), ma ciò non aiuta. – RMS2

Problemi correlati