正方形の画像があります(ただし、この問題は長方形の画像にも当てはまります)。画像をできるだけ大きく表示し、必要に応じて拡大して、縦横比を維持したまま両親を埋めたいと思います。画像はImageViewよりも小さいです。問題は、画像を引き伸ばして、ImageViewの高さと幅を「一致」させることができないことです。
これは私のXMLレイアウトファイルです:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="10dp">
<ImageView Android:id="@+id/image"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:adjustViewBounds="true"
Android:scaleType="fitCenter"
Android:layout_marginTop="10dp"/>
<TextView Android:id="@+id/name"
Android:layout_below="@id/image"
Android:layout_alignLeft="@id/image"
Android:layout_marginTop="20dp"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="18dp"/>
<TextView Android:id="@+id/name2"
Android:layout_below="@id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="14dp"/>
</RelativeLayout>
複数のscaleTypesを持つfill_parent
、wrap_content
の多くの組み合わせを使用しました:fitCenter
、fitStart
、fitEnd
、centerInside
、それらはすべて正しいアスペクト比で画像を描画しますが、それらのどれも実際に画像を拡大せず、ImageView自体の結果、TextViewが画面から完全に押し下げられ、内部の空白スペースがImageView、スケーリングされていない画像、またはトリミングされた画像。
これに適した組み合わせはわかりません。
これら:
Android:layout_height="wrap_content"
Android:scaleType="fitStart"
Android:adjustViewBounds="true"
画像のサイズを変更し、新しい画像サイズに合わせて境界のサイズを変更する必要があります。そうでない場合は、デバイスで使用しているイメージとテストしているデバイスを投稿します。
このコードを使用してください:Android:scaleType="fitXY"
画像のスケーリングの詳細については、この記事で何が動いているのかをご覧ください here
概要:
center
画像をビューの中央に配置しますが、スケーリングは実行しません
centerCrop
画像の両方の寸法(幅と高さ)がビューの対応する寸法(マイナスパディング)以上になるように、画像を均一に拡大縮小します(画像の縦横比を維持します)。その後、画像はビューの中央に配置されます
centerInside
画像の両方の寸法(幅と高さ)がビューの対応する寸法(マイナスパディング)以下になるように、画像を均一に拡大縮小します(画像の縦横比を維持します)
fitCenter
fitEnd
fitStart
fitXY
matrix
描画時に画像行列を使用してスケーリングする
詳細 こちら 新しい記事
このコードをwrap_contentとしてビューレイアウトパラメーターと共に使用します
Android:adjustViewBounds = "true"
これがうまくいくことを願っています。
このxmlコードは機能します!アプリの幅が常にウィンドウと同じであることを指定している場合、Android:adjustViewBounds="true"
は、画像の配給量に応じて高さを設定します。
<ImageView
Android:adjustViewBounds="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:src="@drawable/screen"/>
Android:adjustViewBoundsが同じ問題を抱えていて、画像の上部にパディングがあります。幅と高さのmatch_parent値を持つ相対的なレイアウトには、次のものがありました。
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical" Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/transparent">
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:scaleType="fitStart"
Android:adjustViewBounds="true" ...
相対レイアウトを、幅と高さのwrap_content値を持つ線形レイアウトに変更しましたが、今では大丈夫です:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
プログラムで調整しようとしましたか? TextView
sの高さを計算し、これに基づいて画像の高さと幅を調整すると、本当にうまく機能すると思います。
private void adjustImageView()
{
//Get the display dimensions
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
//TextView name
TextView name = (TextView) findViewById(R.id.name);
name.setText("your name text goes here");
name.measure(0, 0);
//name TextView height
int nameH = name.getMeasuredHeight();
//TextView name2
TextView name2 = (TextView) findViewById(R.id.name2);
name2.setText("your name2 text goes here");
name2.measure(0, 0);
//name2 TextView height
int name2H = name2.getMeasuredHeight();
//Original image
Bitmap imageOriginal = BitmapFactory.decodeResource(getResources(), R.drawable.image);
//Width/Height ratio of your image
float imageOriginalWidthHeightRatio = (float) imageOriginal.getWidth() / (float) imageOriginal.getHeight();
//Calculate the new width and height of the image to display
int imageToShowHeight = metrics.heightPixels - nameH - name2H;
int imageToShowWidth = (int) (imageOriginalWidthHeightRatio * imageToShowHeight);
//Adjust the image width and height if bigger than screen
if(imageToShowWidth > metrics.widthPixels)
{
imageToShowWidth = metrics.widthPixels;
imageToShowHeight = (int) (imageToShowWidth / imageOriginalWidthHeightRatio);
}
//Create the new image to be shown using the new dimensions
Bitmap imageToShow = Bitmap.createScaledBitmap(imageOriginal, imageToShowWidth, imageToShowHeight, true);
//Show the image in the ImageView
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageBitmap(imageToShow);
}
ImageviewでAndroid:layout_height="wrap_content"
を設定します。幅が画面の幅に等しく、縦横比に応じて高さが比例して設定された画像を作成するには、次の手順を実行します。ここで、urlからimageviewに画像を読み込む方法について説明します。
Glide.with(context).load(url).asBitmap().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
// creating the image that maintain aspect ratio with width of image is set to screenwidth.
int width = imageView.getMeasuredWidth();
int diw = resource.getWidth();
if (diw > 0) {
int height = 0;
height = width * resource.getHeight() / diw;
resource = Bitmap.createScaledBitmap(resource, width, height, false);
}
imageView.setImageBitmap(resource);
}
});
お役に立てれば。