我有从不同相机拍摄的图像,具有差异分辨率并且具有差异尺寸。
现在我必须在图像视图中显示这些图像。现在,如果我将图像视图的大小固定为300dp 300dp,图像会被压缩并看起来变形。
同时如果将内容包装到内容中,则尺寸会有所不同。
什么是最好的方法?
答案 0 :(得分:1)
使用其中一个图片加载库:Glide,Square Picasso,UIL或Ion(Ion实际上更像是一种通用的异步加载工具)肮脏的工作给你。所有这些方法都可以在加载时使图像适合所需的大小。
使用vanilla代码,您可能需要设置android:scaleType="centerCrop"
或android:scaleType="centerInside"
,具体取决于您是分别要求“从内部触摸”还是“适合所有”行为。
答案 1 :(得分:0)
这是我通常用来调整位图大小的地方:
public Bitmap decodeSampledBitmap(File res, int reqWidth, int reqHeight) {
if (res != null) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
try {
FileInputStream stream2 = new FileInputStream(res);
BitmapFactory.decodeStream(stream2, null, options);
stream2.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// Calculate inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
o2.inJustDecodeBounds = false;
FileInputStream stream = null;
try {
stream = new FileInputStream(res);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, o2);
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
} else
return null;
}
public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
答案 2 :(得分:0)
Try this code give height and width according to your requirement.
BitmapFactory.Options bitopt = new BitmapFactory.Options();
bitopt.inJustDecodeBounds = true;
Bitmap bit = BitmapFactory.decodeFile(file, bitopt);
int h = (int) Math.ceil(bitopt.outHeight / (float) height);
int w = (int) Math.ceil(bitopt.outWidth / (float) width);
if (h > 1 || w > 1) {
if (h > w) {
bitopt.inSampleSize = h;
} else {
bitopt.inSampleSize = w;
}
}
bitopt.inJustDecodeBounds = false;
bit = BitmapFactory.decodeFile(file, bitopt);
return bit;
}
In XML set height width to imageview and set scaletype to fitXY
答案 3 :(得分:0)
在ImageView中,根据需要更改宽度和高度,使缩放类型适合x(宽度)和y(高度)。这会将图像拉伸到您定义的宽度和高度:
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:id="@+id/imageView"
android:src="@drawable/my_image"
android:scaleType="fitXY" /> <!-- Add this -->
如果您是以编程方式执行此操作,请执行以下操作:
imageView.setImageResource(R.drawable.my_image);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
如果您不想使用fitXY
,请查看此内容:http://etcodehome.blogspot.com/2011/05/android-imageview-scaletype-samples.html
如果您不希望图片被拉伸,可能需要使用centerInside
,并根据您的需要更改图片的高度和宽度。