1. ホーム
  2. アンドロイド

[解決済み】ImageViewの幅いっぱいに画像を拡大縮小し、縦横比を維持する。

2022-04-19 13:31:11

質問

私は GridView . のデータは GridView はサーバーからの要求です。

のアイテムレイアウトは以下の通りです。 GridView :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/analysis_micon_bg"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/half_activity_vertical_margin"
    android:paddingLeft="@dimen/half_activity_horizontal_margin"
    android:paddingRight="@dimen/half_activity_horizontal_margin"
    android:paddingTop="@dimen/half_activity_vertical_margin" >

    <ImageView
        android:id="@+id/ranking_prod_pic"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:contentDescription="@string/app_name"
        android:scaleType="centerCrop" />

    <TextView
        android:id="@+id/ranking_rank_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/ranking_prod_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/ranking_prod_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

サーバーにデータをリクエストし、画像のURLを取得して、画像を Bitmap

public static Bitmap loadBitmapFromInputStream(InputStream is) {
    return BitmapFactory.decodeStream(is);
}

public static Bitmap loadBitmapFromHttpUrl(String url) {
    try {
        return loadBitmapFromInputStream((InputStream) (new URL(url).getContent()));
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
        return null;
    }
}

のコードがあり、そこに getView(int position, View convertView, ViewGroup parent) メソッドを作成します。

Bitmap bitmap = BitmapUtil.loadBitmapFromHttpUrl(product.getHttpUrl());
prodImg.setImageBitmap(bitmap);

画像の大きさは 210*210 . 私のNexus 4でアプリケーションを実行しています。画像は ImageView の幅が狭くなりますが ImageView の高さはスケーリングされません。 ImageView は画像全体が表示されません。

この問題を解決するにはどうしたらよいですか?

どのように解決するのですか?

カスタムクラスやライブラリを使用しない。

<ImageView
    android:id="@id/img"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter" />

scaleType="fitCenter" (省略時のデフォルト)

  • は、親が許す限り幅を広くし、アスペクト比を保ちながら必要に応じて拡大・縮小します。

scaleType="centerInside"

  • の固有幅が小さい場合 src が親の幅より小さい場合

    は、画像を水平方向にセンタリングします
  • の固有幅が小さい場合 src が親の幅より大きい場合

    は、親が許す限りの幅にし、アスペクト比を維持したまま縮小します。

を使用しても問題ありません。 android:src または ImageView.setImage* メソッドで、キーはおそらく adjustViewBounds .