Android ImageViewのサイズがソース画像とスケーリングされない
質問
私はLinearLayoutの中にいくつかのImageViewsを持っています。 私は、彼らが縦にLinearLayout内に収まる一方で、それらのアスペクト比を維持するようにImageViewsを縮小する必要があります。 水平方向に、私はちょうどそれらが互いに隣接している必要があります。
私は、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 (extends 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の高さを取得するにはどうすればよいですか?
ここまで読んでくださった方、ありがとうございます。 解決策の方向性を示していただけると、さらに感謝します!
どのように解決するのですか?
ImageViewを
android:layout_height="fill_parent"
?
編集
- を見つけるのに時間がかかりましたが、ソースを見ることでピンポイントで
adjustViewBounds
. を追加してみてはいかがでしょうか。
android:adjustViewBounds="true"
を追加してみるとよいでしょう。意外なことに、これはデフォルトでfalseになっています。
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] 角丸のImageViewを作るには?
-
[解決済み】ImageViewのソースを変更する
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない
-
[解決済み] Android SDKのgetWidth/Height()とgetMeasuredWidth/Height()の違いは何ですか?
-
[解決済み] イメージビューのスケーリング TOP_CROP
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
imageViewの上下にある余分なスペースを取り除くにはどうしたらいいですか?