私はこのXMLコードを持っています:
<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);
次に、辺の 1 つが端に達するまでビットマップ イメージをスケーリングするための独自の関数を呼び出します (つまり、元のビットマットの幅が高さの 2 倍である場合、イメージビュー内の比率が維持されますが、明らかにそうではありません)。どの 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 が返されるのですか?