2010-08-30 84 views
6

我試圖從URL顯示圖像,該圖像可能大於屏幕尺寸。我有這種工作,但我希望它適合屏幕,並且當屏幕方向改變時我也有問題。圖像很小,我希望它的寬度也可以縮放到屏幕上。 (在這兩種情況下,我想的圖像,以填補滾動屏幕的寬度(如果必要的高度)從URL顯示圖像 - 尺寸和屏幕方向問題

這是我的ImageView:

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

這裏是一個加載圖像的Java代碼: (爲簡單起見,刪除了一些錯誤處理代碼)

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); 

我已經爲Android嘗試不同的設置:。scaleType我很抱歉,如果這個問題已經問過我已經通過關於這一主題的的教程了,但他們似乎不適合我,不確定它是否有任何問題g處理圖像的加載方式。 (從網絡而不是本地資源)

另一個問題是,有時圖像不會加載。沒有運行時錯誤,我在ImageView中什麼都沒有。

如果您需要更多信息或澄清,請讓我知道。

回答

9

有關「有時圖像甚至不加載」是與上下文的問題,所以我用這個函數來解決這個問題

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; 
     } 
    } 

因此,以填補你的形象,你必須在屏幕寬度有這樣

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); 

更新代碼:: 如果裝入大尺寸圖片很明顯,你將不得不等待更長的時間,和下載的問題可能是UnknowHostException引起的。

是的,你是對的,你將在本地保存你的圖像,本地訪問速度比下載更快。

,以避免對旋轉變化問題,將您configChanges =「keyboardHidden |取向」你的Manifest.xml

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

感謝您與最小和最大寬度的幫助內財產。這樣做的竅門,雖然我需要將ImageView放入ScrollView中,如果設置寬度導致圖像超出可用高度。 – RMS2 2010-08-30 21:05:35

+0

現在,至於沒有下載的圖像(我使用Joregsys的代碼),我遇到了各種麻煩。看起來,當圖像不顯示時,發生的情況是當執行.createFromStream方法時出現「SkImageDecoder :: Factory返回null」錯誤。有時候它有效,有時我可以得到。我試着關閉InputStream來刷新緩衝區,但沒有去。我試過在一段時間(d == null)循環中封裝這些代碼行,但隨後我得到了一個無限循環。 – RMS2 2010-08-30 21:05:53

+0

我在旋轉屏幕時也遇到內存問題。如果第一次加載圖像,當方向改變時,我會得到一個OutOfMemoryError。圖片爲1MB - 數碼照片比較小,但對於Android來說可能太大了?我想我正在發生內存泄漏。我試過Image01.getDrawable()。setCallback(null);在活動的onDestroy()中,但這沒有幫助。 – RMS2 2010-08-30 21:07:55