72

ImageViewのサイズ全体を占めるように画像を拡大したいと思います。画像のアスペクト比がImageViewのアスペクト比と正確に一致しない場合、fit_centerscaleType=fit_centerは画像の周囲にバンドを残すため、これは使用する場合とは微妙に異なります。代わりに、画像を中央に配置して拡大し、余分な部分を切り取って、囲んでいるビューを完全に埋めるようにします。

onCreate()中に独自のカスタム画像マトリックスを計算することで、これを実現できます。

final Display display = getWindowManager().getDefaultDisplay();
final float screenWidth = display.getWidth();
final float screenHeight = display.getHeight();
final float imageWidth = splashView.getDrawable().getIntrinsicWidth();
final float imageHeight = splashView.getDrawable().getIntrinsicHeight();
final Matrix splashMatrix = new Matrix();
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth);
splashMatrix.postScale( scale, scale );
splashView.setImageMatrix(splashMatrix);

これは問題なく機能しますが、もっと簡単な方法があるはずです。画像のアスペクト比を維持し、ImageViewを完全に塗りつぶしながら、ImageViewで画像を拡大する方法を知っている人はいますか?

(注:私の場合、ImageViewが全画面表示になっているのでgetWindowManager().getDisplay()、目的の画像サイズを見つけるために使用します。ビューがまだレイアウトされておらず、サイズがないため、splashView.getWidth()/は使用できません)getHeight()

4

5 に答える 5

198

を使用できますandroid:scaleType="centerCrop"。アスペクト比を維持し、必要に応じて画像を拡大縮小します。

詳細については、以下のリンクをご覧ください。

http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

于 2011-07-12T19:41:04.327 に答える
18

場合によっては、必要なのは

android:adjustViewBounds="true"
于 2019-07-02T14:52:46.637 に答える
4

ImageViewのscaleType属性を試してください。http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType

于 2011-07-12T19:39:53.260 に答える
4
imageView.setScaleType(ImageView.ScaleType.FIT_XY);

これは、画像を画像ビュー全体に収めるために機能しました。さらに、imageViewのX軸とY軸に合わせて「ScaleType.FIT_XY」と表示されていることは理にかなっています。

xmlファイルからは次のようになります。

android:scaleType="fitXY"
于 2020-09-30T12:22:14.560 に答える
1

私はとても遅いですが、それが将来役立つことを願っています。scaleType="fitXY"これは、画像に損傷を与えることなく、画像を全画面表示または画像表示に拡大する方法に対する私の解決策です。以下のライブラリを使用してください。

[指定された比率で幅または高さのアスペクトをスケーリングする単純なimageview] https://github.com/santalu/aspect-ratio-imageview

デバイス画面のアスペクト比を見つけるには、次のコードを使用します。

DisplayMetrics metrics =this.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);
于 2021-11-06T17:48:49.127 に答える