web-dev-qa-db-ja.com

親の高さを埋め、Imageをできるだけ大きく表示するIm​​ageViewを作成する方法は?

次のように定義されているImageViewがあります。

 <ImageView
  Android:id="@+id/cover_view"
  Android:layout_width="wrap_content"
  Android:layout_height="match_parent"
  Android:layout_below="@id/title"
  Android:layout_above="@id/divider"
  Android:adjustViewBounds="true"
  Android:src="@drawable/image_placeholder"
  Android:scaleType="fitStart"/>

新しいビットマップをダウンロードした後、ドローアブルを変更します。画像がImageViewの左上隅に表示されます。画像に可能な高さ全体を塗りつぶしてから、ビューの幅を調整して、アスペクト比を変更せずに画像をスケーリングできるようにする方法はありますか?

画像は標準画面のすべてのスペースを占めますが、WVGA解像度では、画像はImageViewの実際の高さの約半分しかかかりません。

30
Janusz

基本的にここでの答えは、あなたが達成しようとしていることに対して事前に定義された値がないということです。解決策は、ニーズに適合する Matrix を作成し、ImageViewsetImageMatrix(matrix) を呼び出すことです。

1
mreichelt

私があなたを正しく理解している場合、使用する必要があるのはcenterCrop scaleTypeです。 fitStartは画像を比例的に拡大縮小しますが、幅も高さもビューのサイズを超えず、画像にはtop|left重力。

centerCropを使用すると、画像が比例して拡大縮小されますが、画像の最短のEdgeがビューのサイズと一致し、長辺に収まらない追加のデータがある場合は、単に切り取られます。もちろん、重力はcenterです。以下は私のために働きました:

<ImageView
        Android:src="@drawable/image_placeholder"
        Android:id="@+id/cover_view"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:scaleType="centerCrop"
/>
47
kcoppock

を呼び出して、スケールタイプをfitXYに変更できます。

imageView.setScaleType(ScaleType.FIT_XY);
10
Nikolay Ivanov

単にxmlのようにしてください

Android:scaleType="fitXY"
4
Atendra Singh