574

Android では、を beと定義しました (携帯電話ImageViewの全幅を占めます)。layout_widthfill_parent

私が入れた画像ImageViewが よりも大きい場合layout_width、Androidはそれをスケーリングしますよね? しかし、高さはどうですか?Android が画像を拡大縮小するとき、アスペクト比は維持されますか?

私が見つけたのは、ImageViewAndroid がImageView. 本当?はいの場合、どうすればその空白を削除できますか?

4

26 に答える 26

861
  1. はい、デフォルトで、Android は ImageView に合わせて画像を縮小し、縦横比を維持します。android:src="..."ただし、ではなくを使用して ImageView に画像を設定していることを確認してくださいandroid:background="..."src=アスペクト比を維持して画像をスケーリングしますが、ImageView のサイズに正確に収まるように画像をbackground=スケーリングおよび歪曲します。(ただし、背景とソースを同時に使用できます。これは、1 つの ImageView を使用して、メイン画像の周りにフレームを表示する場合などに役立ちます。)

  2. android:adjustViewBounds再スケーリングされた画像に合わせて ImageView 自体のサイズを変更することも確認する必要があります。たとえば、通常は正方形の ImageView に長方形の画像がある場合、adjustViewBounds=true を指定すると、ImageView のサイズも長方形に変更されます。これは、ImageView の周りに他のビューがどのように配置されるかに影響します。

    その後、Samuh が書いたように、android:scaleTypeパラメータを使用して、デフォルトで画像をスケーリングする方法を変更できます。ちなみに、これがどのように機能するかを知る最も簡単な方法は、自分で少し実験することです! Eclipse でのプレビューは通常間違っているため、エミュレーター自体 (または実際の電話) でレイアウトを確認することを忘れないでください。

于 2010-03-26T15:07:27.163 に答える
305

を参照してくださいandroid:adjustViewBounds

ドローアブルの縦横比を維持するために ImageView の境界を調整する場合は、これを true に設定します。

于 2010-07-08T12:08:07.400 に答える
194

この特定の問題を抱えている他の人に。幅と高さを比例してスケーリングしImageViewたい があります。fill_parent

次の 2 つの属性を に追加しますImageView

android:adjustViewBounds="true"
android:scaleType="centerCrop"

ImageView幅を にfill_parent、高さを に設定しwrap_contentます。

また、画像をトリミングしたくない場合は、次のことを試してください。

 android:adjustViewBounds="true"
 android:layout_centerInParent="true"
于 2011-05-26T18:45:03.533 に答える
58

適切な縦横比を維持しながら拡大と縮小の両方が必要な場合はImageView、これを XML に追加します。

android:adjustViewBounds="true"
android:scaleType="fitCenter"

これをコードに追加します。

// We need to adjust the height if the width of the bitmap is
// smaller than the view width, otherwise the image will be boxed.
final double viewWidthToBitmapWidthRatio = (double)image.getWidth() / (double)bitmap.getWidth();
image.getLayoutParams().height = (int) (bitmap.getHeight() * viewWidthToBitmapWidthRatio);

これが機能するまでにはしばらく時間がかかりましたが、画像が画面の幅よりも小さい場合と画面の幅よりも大きい場合の両方で機能するようで、画像をボックス化しません。

于 2012-03-18T18:39:25.950 に答える
17

これは私のために働いた:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="39dip"
android:scaleType="centerCrop"
android:adjustViewBounds ="true"
于 2013-03-28T10:31:36.667 に答える
9

以下のコードは、縦横比として画像を拡大縮小します:

Bitmap bitmapImage = BitmapFactory.decodeFile("Your path");
int nh = (int) ( bitmapImage.getHeight() * (512.0 / bitmapImage.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(bitmapImage, 512, nh, true);
your_imageview.setImageBitmap(scaled);
于 2014-09-12T12:23:56.080 に答える
6

画面よりも小さい画像があります。最大値に比例して引き伸ばされ、ビューの中央に配置するには、次のコードを使用する必要がありました。

<ImageView
    android:id="@+id/my_image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true"
    android:adjustViewBounds="true"
    android:layout_weight="1"
    android:scaleType="fitCenter" />

ただし、相対レイアウトがあり、一部の要素がImageViewの上または下に設定されている場合、それらは画像と重なる可能性が高いことに注意してください。

于 2012-10-02T16:12:39.493 に答える
3

画面幅を計算できます。また、ビットマップをスケーリングできます。

 public static float getScreenWidth(Activity activity) {
        Display display = activity.getWindowManager().getDefaultDisplay();
        DisplayMetrics outMetrics = new DisplayMetrics();
        display.getMetrics(outMetrics);
        float pxWidth = outMetrics.widthPixels;
        return pxWidth;
    }

画面の幅とスケーリングされた画像の高さを画面の幅で計算します。

float screenWidth=getScreenWidth(act)
  float newHeight = screenWidth;
  if (bitmap.getWidth() != 0 && bitmap.getHeight() != 0) {
     newHeight = (screenWidth * bitmap.getHeight()) / bitmap.getWidth();
  }

ビットマップをスケーリングした後。

Bitmap scaledBitmap=Bitmap.createScaledBitmap(bitmap, (int) screenWidth, (int) newHeight, true);
于 2015-03-10T12:36:03.247 に答える
3

適切なスケーリングとトリミングを使用せずに画像を画像ビューに正確に合わせたい人のために

imageView.setScaleType(ScaleType.FIT_XY);

ここで、imageView は ImageView を表すビューです

于 2012-12-10T12:14:31.090 に答える
2

画像を可能な限り最大のスペースに配置したい場合は、最適なオプションは次のとおりです。

android:layout_weight="1"
android:scaleType="fitCenter"
于 2012-08-19T15:33:14.217 に答える
1

ImageView を渡し、画面の高さと幅に基づいて作成できます

    public void setScaleImage(EventAssetValueListenerView view){
        // Get the ImageView and its bitmap
        Drawable drawing = view.getDrawable();
        Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
        // Get current dimensions
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        float xScale = ((float) 4) / width;
        float yScale = ((float) 4) / height;
        float scale = (xScale <= yScale) ? xScale : yScale;

        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);

        Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        BitmapDrawable result = new BitmapDrawable(scaledBitmap);
        width = scaledBitmap.getWidth();
        height = scaledBitmap.getHeight();

        view.setImageDrawable(result);

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
        params.width = width;
        params.height = height;
        view.setLayoutParams(params);
    }

于 2016-01-04T13:24:44.460 に答える
1

縦横比を維持しながら、ビットマップをコンテナーのサイズに合わせてスケーリングするアルゴリズムがあります。ここで私の解決策を見つけてください

これが誰かの助けになることを願っています!

于 2014-04-08T08:29:21.050 に答える
0

素早い回答:

<ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center"
        android:src="@drawable/yourImage"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
于 2020-03-01T17:03:18.593 に答える