LinearLayout 内にいくつかの ImageViews があります。ImageViews を縮小して、LinearLayout 内に垂直に収まりながら縦横比を維持する必要があります。水平方向には、それらが互いに隣接する必要があります。
ImageViews の幅は広いが、あまり高くない LinearLayout を持つように、重み付けされたレイアウトをネストする単純化されたテスト ベッドを作成しました。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5">
<LinearLayout android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1">
<ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
<ImageView android:id="@+id/imageView2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/test_image" android:scaleType="fitStart"></ImageView>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"></LinearLayout>
</LinearLayout>
(Eclipse レイアウト エディターでは、画像は垂直方向にクリップされ、まったく拡大縮小されません。しかし、これは私たちが愛することを学ぶ特異性の 1 つにすぎません)
ハードウェアで実行すると、画像は縦横比を維持しながら正しい高さにスケーリングされます。私の問題は、それらが隣り合っていないことです。各 ImageView の高さは、LinearLayout の高さと正しく一致します。各 ImageView の幅は、縮小されていない画像の幅です。実際に縮小された画像は、ImageView の左側に表示されます。このため、画像間に大きなギャップが生じています。
理想的には XML を介してこれを管理したいと考えていますが、これが不可能な場合は、カスタム ビューを使用することが最善の解決策であると理解しています。
高さに応じて幅をスケーリングすることで、必要なサイズのイメージ ビューを作成できるように、onMeasure をオーバーライドする IconView (ImageView を拡張する) クラスを作成してみました。ただし、関数に渡されるparentWidthとparentHeightは、LinearLayoutコンテナではなく、画面の寸法でした。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
// Calculations followed by calls to setMeasuredDimension, setLayoutParams
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
だから私の質問は -
1) 必要に応じて XML を修正することはできますか?
2)カスタム画像に必要な幅を計算できるように、カスタムクラスにLinearLayoutの高さを取得させるにはどうすればよいですか?
ここまで読んでくれてありがとう。解決策の方向を教えていただければ、さらに感謝します!