画像をダウンロードし、Imageview
を使用して画面の背景として動的に設定します。画像を拡大縮小するために、ScaleType
を試しました。
画像の高さが幅よりも大きい場合、ScaleTypes
fitStart
、fitEnd
、およびfitCenter
は機能しません。 Android写真を縮小し、高さに基づいて写真を調整しますが、幅の一部として余分な空白が表示されます。
私は幅に基づいて写真を縮小し、幅に合うようにし、高さの一部として余分な空白スペースがあるかどうか、または高さが長すぎる場合はビューから出ても問題ありません(それが可能であれば?)。
ScaleType.XY
写真を拡大縮小してImageView
にすべてを収め、画像の高さと重量の比率を気にしません。
<ImageView
Android:id="@+id/background"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:scaleType="fitStart"
/>
私はこのコードを使用することになりました:
<ImageView
Android:id="@+id/background"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:scaleType="centerCrop"
Android:src="@drawable/name"
/>
src
の代わりにbackground
を使用して画像を設定してください。
Android:adjustViewBounds="true"
仕事をする!
here にあるこのエレガントなソリューションは、あなたにとって魅力的です。
基本的には、ImageView
を拡張する小さなクラスを作成し、onMeasure
メソッドをオーバーライドして、必要に応じて幅と高さを調整するだけです。ここでは、次を使用して幅に合わせてスケーリングします。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth();
setMeasuredDimension(width, height);
}
この特別なImageView
を次のように使用します。
<your.activity.package.AspectRatioImageView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_gravity="center_vertical"
Android:src="@drawable/test" />
OnCreate()でこれを行うことができる単純な方法は、単に画面の幅を埋め、高さを比例させる(そして画像の比率を知る)場合です。
setContentView(R.layout.truppview_activity);
trupImage = (ImageView) findViewById(R.id.trupImage);
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
float scWidth = outMetrics.widthPixels;
trupImage.getLayoutParams().width = (int) scWidth;
trupImage.getLayoutParams().height = (int) (scWidth * 0.6f);
ここで、0.6は比率の調整です(画像のw&hがわかっていれば、もちろん自動的に計算することもできます)。
PS:
XML側は次のとおりです。
<ImageView
Android:id="@+id/trupImage"
Android:layout_width="match_parent"
Android:background="@color/orange"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:scaleType="fitCenter" />
これは私のために動作します。
ImageViewを拡張するクラスを作成する
package com.yourdomain.utils;
import Android.content.Context;
import Android.graphics.drawable.Drawable;
import Android.util.AttributeSet;
import Android.widget.ImageView;
public class ResizableImageView extends ImageView {
public ResizableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable d = getDrawable();
if (d != null) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());
setMeasuredDimension(width, height);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
Xmlでは、ImageViewの代わりに次を使用します
<com.yourdomain.utils.ResizableImageView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:src="@drawable/test" />
私はあなたがXMLだけでそれを行うことはできないと思う、あなたは自分自身のサイズを変更する必要がある、ビットマップ
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
try {
((ImageView) findViewById(R.id.background))
.setImageBitmap(ShrinkBitmap(width));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
それから
private Bitmap ShrinkBitmap(int width)
throws FileNotFoundException {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.img, bmpFactoryOptions);
int widthRatio = (int) Android.util.FloatMath
.ceil(bmpFactoryOptions.outWidth / (float) width);
bmpFactoryOptions.inSampleSize = widthRatio;
if (bmpFactoryOptions.inSampleSize <= 0)
bmpFactoryOptions.inSampleSize = 0;
bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.img, bmpFactoryOptions);
return bitmap;
}
そしてレイアウト
<ImageView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/background"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
/>