2016-02-25 181 views
0

我目前正在嘗試通過URL下載圖片並將其放入TextView中,使用我的Android應用程序中的「fromHtml」。由於滑動面板,我使用了TextView。我需要同時擁有文字和圖片,試圖建立一個好的模板。從url獲取小尺寸圖片Android

我得到了正確的圖像,但我不明白爲什麼它如此之小。 我試圖下載的圖片是在一臺我已經做出了400x300圖片的wamp服務器上。

我在StackOverflow上使用了一段代碼,從實現ImageGetter和getIntrinsicWidth()和getIntrinsicHeight()方法的url中獲取圖像,但它們將圖片大小除以4!

我已經打印出這兩個結果,IntrinsicWidth返回100,IntrinsicHeight返回75 ...所以它在我的應用程序中顯示一個非常小的圖片,我真的不知道爲什麼,我無法弄清楚它..

我試過使用7360x4912圖片,並且在這個尺寸下,我能夠在TextView中獲得適當的圖片尺寸(但仍然被4除以獲得1840x1228圖片)。

我也試圖通過4乘這些值,但它只是放大的容器,而不是內容...

這裏是我的Java代碼示例:

@Override 
    protected void onPostExecute(Drawable result) { 
     // set the correct bound according to the result from HTTP call 
     Log.d("IMAGE DEBUG", ""+result.getIntrinsicWidth()); 
     Log.d("IMAGE DEBUG", ""+result.getIntrinsicHeight()); 
     int width = result.getIntrinsicWidth(); 
     int height = result.getIntrinsicHeight(); 

     urlDrawable.setBounds(0, 0, width, height); 

     // change the reference of the current drawable to the result 
     // from the HTTP call 
     urlDrawable.drawable = result; 

     URLImageParser.this.container.setMinimumHeight(result.getIntrinsicHeight()); 
     URLImageParser.this.container.requestLayout(); 

     // redraw the image by invalidating the container 
     URLImageParser.this.container.invalidate(); 
    } 

    /*** 
    * Get the Drawable from URL 
    * @param urlString 
    * @return 
    */ 
    public Drawable fetchDrawable(String urlString) { 
     try { 
      Log.d("IMAGE DEBUG", "" + urlString); 
      InputStream is = fetch(urlString); 
      Drawable drawable = Drawable.createFromStream(is, "src"); 
      drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0 
        + drawable.getIntrinsicHeight()); 
      return drawable; 
     } catch (Exception e) { 
      return null; 
     } 
    } 

這裏是哪裏使用的圖片,我得到:

TextView panel = (TextView) findViewById(R.id.slidingpanelview); 
      URLImageParser p = new URLImageParser(panel, getApplicationContext()); 

      String name = queryResults.get(mHashMap.get(marker)).getName(); 
      String address = queryResults.get(mHashMap.get(marker)).getAddress(); 
      String phonenumber = queryResults.get(mHashMap.get(marker)).getPhoneNumber(); 

      panel.setText(""); 
      String titleDisplay = "<table><tr><h2 align=\"center\">"+name+"</h2></tr>"; 
      String addressDisplay = "<tr><h3 align=\"left\">Address</h3><p>"+address+"</p></tr>"; 
      String phonenumberDisplay = "<tr><h3 align=\"left\">Phone number</h3><p>"+phonenumber+"</p></tr>"; 
      String space ="<tr></tr>"; 
      String imageDisplay = "<tr><img src=\"http://ip_address_from_server/img/"+name+".jpg\"></tr></table>"; 
      Spanned htmlSpan = Html.fromHtml(titleDisplay + addressDisplay + phonenumberDisplay + space + imageDisplay, p, null); 
      //Spanned htmlSpan = Html.fromHtml(titleDisplay + addressDisplay + phonenumberDisplay + space + imageDisplay); 
      panel.setText(htmlSpan); 

這裏是什麼樣子,在我的Android應用程序的400x300的圖像: 400x300 result

這裏是什麼樣子與7360x4912的圖像: 7360x4912 result

所以基本上我想有在一個滑動屏幕,同時文字和圖片,因此,如果您有關於如何一些想法修補這個,或者如果你知道另一種方法來做到這一點,那將是很棒的。

提前致謝!

回答

0

getIntrinsicWidthgetIntrinsicHeight方法返回的大小繪製應該是在Android後縮放drawable。以編程方式創建drawable將創建一個默認的mdpi drawable,因此,如果您正在xxxhdpi設備上運行此應用程序,這將解釋您的4x比例因子。

Here is a better explanation of how getIntrinsic functions actually work

+0

哦,我明白了!非常感謝你的解釋! 其實這是真的,我直接在我的三星Galaxy S6有2560 x 1440分辨率開發這個應用程序。 所以我必須找到我可以如何改變我得到的drawable的指標? – Lucien

+0

是的,你可以通過調用getResources()。getDisplayMetrics()。density –