2011-05-29 58 views
0

我想在一條水平線上放置8個圖像大拇指,使用整個可用寬度。
這些圖像是從web服務中獲取的,它允許我指定尺寸。
我試過如下:在運行時設置px的ImageView的大小

int widthPx = container.getWidth(); 
LinearLayout thumbs = (LinearLayout)curView.findViewById(R.id.thumbs); 
    for(int i=0; i<pics.length; i++) { 
     ImageView iv = new ImageView(mContextt); 

     int thumbSize = widthPx/8; 

     try { 
      String url = "http://someurl/" + pics[i] + "&width=" + thumbSize + "&height=" + thumbSize; 
      URL imgUrl = new URL(url); 
      Drawable imgD = Drawable.createFromStream(imgUrl.openStream(), "src"); 
      iv.setImageDrawable(imgD); 
     } 
     catch (Exception e) { 
      Log.e(TAG, "loading image failed"); 
      e.printStackTrace(); 
     } 

     thumbs.addView(iv); 
    } 

的LinearLayout中拇指有機器人:?layout_width =「FILL_PARENT一套由此代碼生成的拇指顯著較小然後寬度的1/8爲什麼這會是什麼正確的方式

更新:
此代碼是內部onCreateView片段雖然我的寬度值是基於所述根查看計算出的和是否正確,thumbs.getWidth()返回0,雖然。之前的觀點是誇大的,應該也是如此o由於layout_width設置爲fill_parent,所以寬度爲480。我不確定這是否是一個問題。

我的假設是正確的,默認情況下創建的ImageViews的佈局設置爲wrap_content?如果不是,如何用Java代碼設置它?

+0

什麼是容器?你用'container.getWidth();'得到的數字是多少? – Aleadam 2011-05-29 19:39:14

+0

這裏的容器是一個FrameLayout,它充當這個代碼所來自的片段的根。 getWidth()正確返回480,因此單個拇指是60x60px。這是否與px/dip轉換有關? – 2011-05-29 19:46:40

+1

如果使用'thumbs.addView(iv,新的LayoutParams(thumbSize,thumbSize);'它是否使它的尺寸合適? – Aleadam 2011-05-29 19:56:17

回答

3

添加ImageView s的固定大小,即:

thumbs.addView (iv, new LayoutParams(thumbSize, thumbSize)); 

要回答(部分)在評論這些問題:

ImageView API說:

負責從圖像計算其測量的,以便它可以以任何佈局管理器

使用,以便它可能假定爲160 dpi的60像素(I可能是錯的存在)。

+0

這很有趣,我的設備有240dpi,這是否意味着它會縮小60px?如果是這樣,我可以以某種方式阻止它加載圖像動態?我猜想本地圖像,如果它們在drawable-hdpi文件夾中可用,它不會發生。是否正確? – 2011-05-29 20:15:13

+0

玩[DisplayMetrics]返回的值(http://developer.android.com/reference/android /util/DisplayMetrics.html),你可以從你的顯示器中獲得密度,關於第二個,這就是爲什麼你將它們分開放置在不同的文件夾中,對吧? – Aleadam 2011-05-29 20:19:31

+0

這是否意味着Android總是將遠程圖像看作是從可繪製(160dpi)文件夾加載的?在這種情況下,建議如何防止按比例縮放以根據建議手動設置LayoutParameters? – 2011-05-29 20:25:24

0

我建議使用這樣的:

widthPx = getWindowManager().getDefaultDisplay().getWidth(); 
相關問題