0

私はこの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 が返されるのですか?

4

3 に答える 3

1

から電話をかけているようですonCreate()。アクティビティウィンドウが接続されるのを待ってから呼び出しgetWidth()getHeight()オンにする必要があります。アクティビティのメソッドから呼び出してimageView試すことができます。getWidth()getHeight()onWindowFocusChanged()

編集

@Override
public void onWindowFocusChanged(boolean hasFocus){
    int width=imageView.getWidth();
    int height=imageView.getHeight();
}
于 2013-05-05T12:04:32.653 に答える