2013-04-04 283 views
0

有沒有辦法解決這個問題?我試過invalidate(),但它仍然顯示相同的問題。會發生的是,在打開頁面/活動之後,圖像的行爲與圖A中的圖像相似。它只是在來回滾動後呈現給我所需的佈局(圖B)。 enter image description hereAndroid-圖像渲染

我試圖做的是運行時設置圖像的寬度和heigth。所以這也是與我以前的問題有關:Images in my HorizontalListView changes it size randomlyImageView dynamic width and height,它們收到了很少的幫助。

對於這件事有什麼建議嗎?

編輯:順便說一句,我的課是: MyCustomAdapter(擴展baseadapter,這就要求從ImageLoader的的displayimage()), MyActivityImageLoader的(這是我的圖片網址加載,解碼異步顯示)

林還困惑,其中i將設置的ImageView的高度和寬度。現在,我將它設置在ImageLoader上。沒關係。但我不知道我是否做了正確的事情。

+0

設置我的'機器人活動抓起ViewTreeObserver一個固定值「'然後我的''android:layout_height =」wrap_content「'。 – elL 2013-04-04 11:36:32

回答

0

如果你想設置的寬度和高度在運行時手動,之後進行查看已經被佈局系統測量搶到的ImageView的LayoutParams參考。如果在呈現階段做這個太早,你的觀點的寬度和高度以及它的父視圖等將是0

我有一個開源庫,可以幫助你一些代碼。該過程分爲兩部分:

  1. 設置附加到ViewTreeObserver的OnPreDrawListener作爲控件。我的例子是在一個自定義控件裏面做的,但是你也可以在你的活動中做到這一點。
  2. 裏面的onPreDraw方法,你的形象和它的父母現在都分配有其寬度和高度值。您可以進行計算,然後手動將寬度和/或高度設置爲視圖的LayoutParams對象(不要忘記將其設置回)。

看看這個例子,我將一個寬高比應用到自定義的ImageView中,然後再渲染到屏幕上。我不知道這是否恰好適合你的使用情況,但這將展示如何將OnPreDrawListener添加到ViewTreeObserver,取出當你完成,並在運行時

https://github.com/aguynamedrich/beacon-utils/blob/master/Library/src/us/beacondigital/utils/RemoteImageView.java#L78

應用動態調整大小的視圖

這是一個修改後的版本,可以刪除我特定的調整大小邏輯。 layout_width =「到:這也從ImageView的,這是一個更可能的情況,如果你不打算使用一個自定義的控制,你只希望做這

private void initResizeLogic() { 
    final ViewTreeObserver obs = imageView.getViewTreeObserver(); 
    obs.addOnPreDrawListener(new OnPreDrawListener() { 

     public boolean onPreDraw() { 
      dynamicResize(); 
      obs.removeOnPreDrawListener(this); 
      return true; 
     } 
    }); 
} 

protected void dynamicResize() { 
     ViewGroup.LayoutParams lp = imageView.getLayoutParams(); 
     // resize logic goes here... 
     // imageView.getWidth() and imageView.getHeight() now return 
     // their initial layout values 
     lp.height = someCalculatedHeight; 
     lp.width = someCalculatedWidth; 
     imageView.setLayoutParams(lp); 
    } 
} 
+0

我認爲這可以提供幫助。我會給它嘗試.. – elL 2013-04-04 04:19:01