Answers:
是的,默认情况下,Android将按比例缩小图像以适合ImageView,并保持宽高比。但是,请确保使用android:src="..."
而不是将图像设置为ImageView android:background="..."
。src=
使其缩放图像以保持纵横比,但background=
使其缩放并扭曲图像以使其完全适合ImageView的大小。(不过,您可以同时使用背景和源,这对于诸如仅使用一个ImageView在主图像周围显示框架等操作很有用。)
您还应该看到android:adjustViewBounds
使ImageView自行调整大小以适合重新缩放的图像。例如,如果您在通常为正方形ImageView的情况下有一个矩形图像,那么adjustViewBounds = true将使其也将ImageView的大小也调整为矩形。然后,这会影响其他视图在ImageView周围的布局。
然后如Samuh所述,您可以使用android:scaleType
参数更改默认缩放图像的方式。顺便说一句,发现这种工作方式的最简单方法就是简单地自己尝试一下!只需记住要查看模拟器本身(或实际电话)中的布局,因为Eclipse中的预览通常是错误的。
image.setImageDrawable(...)
是android:src="..."
在XML以及。
android:adjustViewBounds
是我困惑的最后一块,谢谢!
如果您希望ImageView调整其边界以保留其可绘制对象的纵横比,请将其设置为true。
对于其他任何遇到此特定问题的人。您有一个ImageView
想要fill_parent
按比例缩放的宽度和高度:
将这两个属性添加到您的ImageView
:
android:adjustViewBounds="true"
android:scaleType="centerCrop"
并将ImageView
宽度设置为fill_parent
,高度设置为wrap_content
。
另外,如果您不希望裁剪图像,请尝试以下操作:
android:adjustViewBounds="true"
android:layout_centerInParent="true"
View
)” 除外。AFAICT没有其他视图adjustViewBounds
或scaleType
属性。
如果要ImageView
在保持适当的宽高比的同时进行缩放,请将其添加到XML:
android:adjustViewBounds="true"
android:scaleType="fitCenter"
将此添加到您的代码:
// We need to adjust the height if the width of the bitmap is
// smaller than the view width, otherwise the image will be boxed.
final double viewWidthToBitmapWidthRatio = (double)image.getWidth() / (double)bitmap.getWidth();
image.getLayoutParams().height = (int) (bitmap.getHeight() * viewWidthToBitmapWidthRatio);
我花了一些时间才能完成此工作,但是在图像小于屏幕宽度且大于屏幕宽度并且不对图像进行装箱的情况下,这似乎都可以使用。
这解决了我的问题
android:adjustViewBounds="true"
android:scaleType="fitXY"
下面的代码将比例图像用作宽高比:
Bitmap bitmapImage = BitmapFactory.decodeFile("Your path");
int nh = (int) ( bitmapImage.getHeight() * (512.0 / bitmapImage.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(bitmapImage, 512, nh, true);
your_imageview.setImageBitmap(scaled);
看一下ImageView.ScaleType来控制和了解在.NET中调整大小的方式ImageView
。调整图像大小(同时保持其宽高比)时,图像的高度或宽度可能会小于其ImageView
尺寸。
在ImageView中使用以下属性以保持纵横比:
android:adjustViewBounds="true"
android:scaleType="fitXY"
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
/>
这是在ConstraintLayout中为我工作的方式:
<ImageView
android:id="@+id/myImg"
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"/>
然后在代码中,将drawable设置为:
ImageView imgView = findViewById(R.id.myImg);
imgView.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.image_to_show, null));
这可以根据其宽高比很好地拟合图像,并使图像居中。
我的图像小于屏幕。为了使其与最大比例成比例地拉伸并在视图中居中,我必须使用以下代码:
<ImageView
android:id="@+id/my_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:layout_weight="1"
android:scaleType="fitCenter" />
但是请记住,如果您有相对的布局,并且某些元素设置在ImageView的上方或下方,则它们很可能会被图像重叠。
如果图像质量下降,请使用
android:adjustViewBounds="true"
代替
android:adjustViewBounds="true"
android:scaleType="fitXY"
您可以计算屏幕宽度。您可以缩放位图。
public static float getScreenWidth(Activity activity) {
Display display = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
float pxWidth = outMetrics.widthPixels;
return pxWidth;
}
计算屏幕宽度和按屏幕宽度缩放的图像高度。
float screenWidth=getScreenWidth(act)
float newHeight = screenWidth;
if (bitmap.getWidth() != 0 && bitmap.getHeight() != 0) {
newHeight = (screenWidth * bitmap.getHeight()) / bitmap.getWidth();
}
之后就可以缩放位图了。
Bitmap scaledBitmap=Bitmap.createScaledBitmap(bitmap, (int) screenWidth, (int) newHeight, true);
不需要任何Java代码。您只需要:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop" />
关键在宽度和高度的匹配父项中
我用这个:
<ImageView
android:id="@+id/logo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:scaleType="centerInside"
android:src="@drawable/logo" />
在cardview
用于舍入imageview
并固定android:layout_height
为标题的情况下,这对我来说可以用Glide
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="220dp"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
>
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|top"
card_view:cardBackgroundColor="@color/colorPrimary"
card_view:cardCornerRadius="10dp"
card_view:cardElevation="10dp"
card_view:cardPreventCornerOverlap="false"
card_view:cardUseCompatPadding="true">
<ImageView
android:adjustViewBounds="true"
android:maxHeight="220dp"
android:id="@+id/iv_full"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitCenter"/>
</android.support.v7.widget.CardView>
</FrameLayout>
您可以缩放图像,这也会减小图像的尺寸。您可以下载并使用它的库。 https://github.com/niraj124124/Images-Files-scale-and-compress.git
使用方法1)导入压缩机v1.0。罐到您的项目。2)添加以下示例代码进行测试。ResizeLimiter resize = ImageResizer.build(); resize.scale(“ inputImagePath”,“ outputImagePath”,imageWidth,imageHeight); 根据您的要求还有更多方法
传递您的ImageView并根据屏幕的高度和宽度进行制作
public void setScaleImage(EventAssetValueListenerView view){
// Get the ImageView and its bitmap
Drawable drawing = view.getDrawable();
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
// Get current dimensions
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float xScale = ((float) 4) / width;
float yScale = ((float) 4) / height;
float scale = (xScale <= yScale) ? xScale : yScale;
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
BitmapDrawable result = new BitmapDrawable(scaledBitmap);
width = scaledBitmap.getWidth();
height = scaledBitmap.getHeight();
view.setImageDrawable(result);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
params.width = width;
params.height = height;
view.setLayoutParams(params);
}
快速回答:
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:src="@drawable/yourImage"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
setImageBitmap
是一样的android:src="..."
,并setBackground...
是android:background="..."