mic*_*ael 501 android image-scaling android-imageview
在Android中,我所定义的ImageView的layout_width是fill_parent(可能需要在电话的全宽).
如果我放的图像ImageView大于layout_width,那么Android会缩放它,对吧?但身高呢?当Android缩放图像时,它会保持纵横比吗?
我发现,ImageView当Android缩放比图像大的图像时,顶部和底部有一些空白区域ImageView.真的吗?如果是,我该如何消除那个空白区?
Ste*_*ley 775
是的,默认情况下,Android会缩小图像以适应ImageView,从而保持纵横比.但是,请确保使用android:src="..."而不是将图像设置为ImageView android:background="...".src=使其缩放图像保持宽高比,但background=使其缩放和扭曲图像,使其完全适合ImageView的大小.(您可以同时使用背景和源,这对于仅使用一个ImageView在主图像周围显示框架等内容非常有用.)
您还应该看到android:adjustViewBounds使ImageView调整大小以适应重新缩放的图像.例如,如果在通常为方形的ImageView中有矩形图像,adjustViewBounds = true将使ImageView的大小也变为矩形.这会影响其他视图在ImageView周围的布局方式.
然后,正如Samuh所写,您可以使用android:scaleType参数更改默认缩放图像的方式.顺便说一下,发现它是如何工作的最简单方法就是自己试验一下!请记住查看模拟器本身(或实际手机)中的布局,因为Eclipse中的预览通常是错误的.
小智 276
如果希望ImageView调整其边界以保持其drawable的纵横比,请将此属性设置为true.
Kev*_*ker 162
对于有这个特殊问题的其他人.您有一个ImageView(或其他View)想要的宽度fill_parent和高度按比例缩放:
将以下两个属性添加到您的ImageView:
android:adjustViewBounds="true"
android:scaleType="centerCrop"
Run Code Online (Sandbox Code Playgroud)
并将ImageView宽度设置为fill_parent和高度wrap_content.
此外,如果您不希望裁剪图像,请尝试以下操作:
android:adjustViewBounds="true"
android:layout_centerInParent="true"
Run Code Online (Sandbox Code Playgroud)
小智 54
如果您希望ImageView在保持适当的宽高比的同时向上和向下扩展,请将其添加到XML:
android:adjustViewBounds="true"
android:scaleType="fitCenter"
Run Code Online (Sandbox Code Playgroud)
将其添加到您的代码中:
// 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);
Run Code Online (Sandbox Code Playgroud)
我需要一段时间才能完成这项工作,但这似乎适用于图像小于屏幕宽度且大于屏幕宽度的情况,并且它不会对图像进行包装.
Mik*_*679 13
这对我有用:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="39dip"
android:scaleType="centerCrop"
android:adjustViewBounds ="true"
Run Code Online (Sandbox Code Playgroud)
Jee*_*eet 11
这就是它在 ConstraintLayout 中对我的工作方式:
<ImageView
android:id="@+id/myImg"
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"/>
Run Code Online (Sandbox Code Playgroud)
然后在代码中,我将 drawable 设置为:
ImageView imgView = findViewById(R.id.myImg);
imgView.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.image_to_show, null));
Run Code Online (Sandbox Code Playgroud)
这根据其纵横比很好地适合图像并将其保持在中心。
下面的代码工作比例图像作为宽高比:
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);
Run Code Online (Sandbox Code Playgroud)
小智 8
这解决了我的问题
android:adjustViewBounds="true"
android:scaleType="fitXY"
Run Code Online (Sandbox Code Playgroud)
我的图像比屏幕小。为了让它按比例拉伸到最大值并在视图中居中,我必须使用以下代码:
<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" />
Run Code Online (Sandbox Code Playgroud)
但是请记住,如果您有一个相对布局并且将某些元素设置在 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"
/>
Run Code Online (Sandbox Code Playgroud)
如果图像质量下降:使用
android:adjustViewBounds="true"
Run Code Online (Sandbox Code Playgroud)
代替
android:adjustViewBounds="true"
android:scaleType="fitXY"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
576026 次 |
| 最近记录: |