我在线性布局上有一个imageview。
我希望imageview能够缩放它所拥有的位图,因此它在线性布局中占用了最大的空间,但仍能保持正确的图像比例。
public static void sharedUtilScaleImage(ImageView view)
{
Drawable drawing = view.getDrawable();
//--
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
int widthParent = view.getWidth();
int heightParent = view.getHeight();
//--
float density = 1;
if (true) {
density = MicApp.getContext().getResources().getDisplayMetrics().density;
}
//--
float xScale = ((float) widthParent * density) / bitmapWidth;
float yScale = ((float) heightParent * density) / bitmapHeight;
float minScale = Math.min(xScale, yScale);
//--
Matrix matrix = new Matrix();
matrix.postScale(minScale, minScale);
//--
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true);
BitmapDrawable result = new BitmapDrawable(scaledBitmap);
view.setImageDrawable(result);
}
作为参考,我在这里找到了一些上面的代码: HTTTP://stackoverflow.com/questions/8114085/how-to-create-white-border-around-bitmap
然而,我觉得上面有点令人费解。
为什么返回值的差异?
我喜欢我的位图返回它们的实际像素大小。但我在其他地方读到要求将它们放在“res / drawable-nodpi”中,这看起来像是一个额外的不一致?
作为参考,在imageview中放置位图的代码和线性布局中的imageview如下所示:
imageView.setImageResource(picIDs[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
imageView.setLayoutParams(lp);
//--
linearLayoutInner.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
linearLayoutInner.addView(imageView);
答案 0 :(得分:2)
好像你想将你的imageview设置为自动调整边界:http://developer.android.com/reference/android/widget/ImageView.html#setAdjustViewBounds(boolean),缩放类型为FIT_CENTER
Bitmap具有getScaledWidth& getScaledHeight将为您提供调整后的维度(从您的资源中传递显示指标) 一个视图的getWidth& getHeight应该给出大小的像素值,但如果父级有任何填充,MATCH_PARENT / FILL_PARENT将匹配父级大小减去填充(或边距)。
答案 1 :(得分:1)
有多种方法可以做到:
答案 2 :(得分:1)
对于您想要的原始大小的位图,只需创建文件夹'drawable'并将它们放在那里。
你的缩放图像代码似乎是正确的,我有一个警告你的View仍然会与缩放之前的大小相同。因此,你可以有一些视觉副作用,如图像周围的空白区域,如果你定义了一些比例类型,Android仍然会缩放图像。 如果根据缩放的位图设置视图的大小,则可以避免这种情况。
bitmap = Bitmap.createScaledBitmap(bitmap, (int)(bitmap.getWidth() * scaleFactor), (int)(bitmap.getHeight() * scaleFactor), true);
image.setImageBitmap(bitmap);
LayoutParams params = (LayoutParams) image.getLayoutParams();
params.width = bitmap.getWidth();
params.height = bitmap.getHeight();
image.setLayoutParams(params);
希望这有助于并享受您的工作。