我有一个方形的图像(尽管这个问题也适用于矩形图像)。 我想要显示的图像尽可能的大,拉伸他们,如果有必要,以填补他们的父母,同时仍然保持纵横比。 该图像是比ImageView的小。 问题是,我不能拉伸图像和“匹配”的ImageView的的高度和宽度。
这是我的XML布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<ImageView android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:layout_marginTop="10dp"/>
<TextView android:id="@+id/name"
android:layout_below="@id/image"
android:layout_alignLeft="@id/image"
android:layout_marginTop="20dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18dp"/>
<TextView android:id="@+id/name2"
android:layout_below="@id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="14dp"/>
</RelativeLayout>
我已经使用了多种组合fill_parent
, wrap_content
多scaleTypes: fitCenter
, fitStart
, fitEnd
, centerInside
,他们都画在正确的纵横比的图像,但它们都没有实际缩放图像UP和ImageView的本身 ,导致无论是在TextViews被推一路下滑到屏幕中,ImageView的内部空白,图像不进行缩放,或者图像裁剪。
我不能完全弄清楚这个正确的组合。
Answer 1:
这些:
android:layout_height="wrap_content"
android:scaleType="fitStart"
android:adjustViewBounds="true"
要调整图像的大小,改变边界的大小以适应新的图像大小。 如果不这样做,你的设备上张贴您使用的,哪些是你在测试设备上的图像。
Answer 2:
使用此代码: android:scaleType="fitXY"
有关图像缩放的详细信息,看看这是什么文章中示意这里
摘要:
居中图像中的观点,但执行不结垢
缩放图像均匀(保持图像的纵横比),以使图像的两个尺寸(宽度和高度)会比图(减去填充)的对应尺寸等于或更大。 该图像然后在视图中为中心
缩放图像均匀(保持图像的纵横比),以使图像的两个尺寸(宽度和高度)会比图(减去填充)的对应尺寸等于或小于
绘制时缩放使用图像矩阵
更多的细节在这里新文章
Answer 3:
使用此代码视图布局参数wrapcontent
机器人:adjustViewBounds = “真”
希望这会工作。
Answer 4:
这个XML代码将工作! 如果您要指定您的应用宽度总是一样的窗口,那么android:adjustViewBounds="true"
将设置高度各自对图像的口粮。
<ImageView
android:adjustViewBounds="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/screen"/>
Answer 5:
我有同样的问题,安卓adjustViewBounds没有做自己的工作,并为在像的顶部填充。 成相对布局有match_parent值的宽度和高度,我有:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitStart"
android:adjustViewBounds="true" ...
我改变了相对布局的线性布局,宽度和高度WRAP_CONTENT值,现在它是确定:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Answer 6:
你有没有尝试programmaticaly调整呢? 我认为它的作品真的很好,如果你计算你的高度TextView
S和调整基于此图像的高度和宽度。
private void adjustImageView()
{
//Get the display dimensions
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
//TextView name
TextView name = (TextView) findViewById(R.id.name);
name.setText("your name text goes here");
name.measure(0, 0);
//name TextView height
int nameH = name.getMeasuredHeight();
//TextView name2
TextView name2 = (TextView) findViewById(R.id.name2);
name2.setText("your name2 text goes here");
name2.measure(0, 0);
//name2 TextView height
int name2H = name2.getMeasuredHeight();
//Original image
Bitmap imageOriginal = BitmapFactory.decodeResource(getResources(), R.drawable.image);
//Width/Height ratio of your image
float imageOriginalWidthHeightRatio = (float) imageOriginal.getWidth() / (float) imageOriginal.getHeight();
//Calculate the new width and height of the image to display
int imageToShowHeight = metrics.heightPixels - nameH - name2H;
int imageToShowWidth = (int) (imageOriginalWidthHeightRatio * imageToShowHeight);
//Adjust the image width and height if bigger than screen
if(imageToShowWidth > metrics.widthPixels)
{
imageToShowWidth = metrics.widthPixels;
imageToShowHeight = (int) (imageToShowWidth / imageOriginalWidthHeightRatio);
}
//Create the new image to be shown using the new dimensions
Bitmap imageToShow = Bitmap.createScaledBitmap(imageOriginal, imageToShowWidth, imageToShowHeight, true);
//Show the image in the ImageView
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageBitmap(imageToShow);
}
Answer 7:
设置android:layout_height="wrap_content"
在ImageView的。 为了生成图像与宽度等于屏幕宽度和高度根据方面比成比例地设定,执行以下操作。 在这里我提到如何从URL加载图像的ImageView。
Glide.with(context).load(url).asBitmap().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
// creating the image that maintain aspect ratio with width of image is set to screenwidth.
int width = imageView.getMeasuredWidth();
int diw = resource.getWidth();
if (diw > 0) {
int height = 0;
height = width * resource.getHeight() / diw;
resource = Bitmap.createScaledBitmap(resource, width, height, false);
}
imageView.setImageBitmap(resource);
}
});
希望这可以帮助。
文章来源: ImageView fills parent's width OR height, but maintains aspect ratio