我有這樣的XML代碼的寬度和喚起注意:如何獲得ImageView的
<LinearLayout
android:id="@+id/linearLayoutInner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@layout/gallery_image_background"
/>
那麼這個代碼:
LinearLayout linearLayoutInner = (LinearLayout) findViewById(R.id.linearLayoutInner);
ImageView imageView = new ImageView(thisActivityContext);
imageView.setImageResource(R.drawable.example);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
imageView.setLayoutParams(lp);
linearLayoutInner.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
linearLayoutInner.addView(imageView);
我再調用自身的功能,是爲了擴大位圖直到其中一個邊緣到達邊緣(即,如果原始bitmat是高度的兩倍,則它將保持imageview內部的比例,這顯然不受任何scaletype設置支持):
SharedCode.sharedUtilScaleImage(imageView);
問題來了。該函數需要知道包含可繪製位圖的視圖的大小。如果imageView行爲正確,則應使用MATCH_PARENT,並因此給出linearLayoutInner的寬度/高度。但是,下面的代碼返回零:
int heightParent = max(imageView.getLayoutParams().height, imageView.getHeight());
int widthParent = max(imageView.getLayoutParams().width, imageView.getWidth());
如何解決此問題?爲什麼我返回0而不是正確的高度/寬度?
(Upvoted)在什麼時候叫這個onMeasure? (如果它只被調用一次,我想我可以創建一些等待的代碼。)我需要能夠根據需要傳遞ImageView引用。在初始創建後,imageview/linearlayout的高度/寬度應該不會改變**。 (當然,bimaps的改變對應於另一個控件上的點擊事件) – Tom 2013-05-05 13:04:30
@Tom onMeasure()在第一次繪製視圖之前調用一次,並且每當大小改變時再次調用它。 – 2013-05-05 13:05:33
只是爲了確認,這個解決方案的工作:) – Tom 2013-05-09 11:55:49