我想拉伸图像以填充宽度并根据宽度调整高度并保持纵横比。我希望它应该覆盖整个宽度(fillparent),并且图像视图的高度应该像这样调整,以便保持纵横比。
我尝试了 fit_xy 但不适用于我的情况。请帮我
我想拉伸图像以填充宽度并根据宽度调整高度并保持纵横比。我希望它应该覆盖整个宽度(fillparent),并且图像视图的高度应该像这样调整,以便保持纵横比。
我尝试了 fit_xy 但不适用于我的情况。请帮我
即使您设置比例类型 fit_xy,也有两种可能的解决方法
1) 默认情况下,Android 会缩小图像以适应 ImageView,保持纵横比。但是,请确保您将图像设置为 ImageView 使用android:src="..."
而不是android:background="..."
. src=
使其缩放图像保持纵横比,但background=
使其缩放和扭曲图像以使其完全适合 ImageView 的大小。(不过,您可以同时使用背景和源,这对于仅使用一个 ImageView 在主图像周围显示框架等非常有用。)
2)您还应该看到android:adjustViewBounds
使 ImageView 调整自身大小以适应重新缩放的图像。例如,如果您在通常是方形的 ImageView 中有一个矩形图像,则 adjustViewBounds=true 将使其也将 ImageView 的大小调整为矩形。这会影响其他视图在 ImageView 周围的布局方式。
您可以使用参数更改默认缩放图像的方式android:scaleType
。顺便说一句,发现它是如何工作的最简单的方法就是自己尝试一下!请记住查看模拟器本身(或实际手机)中的布局,因为 Eclipse 中的预览通常是错误的。
我不确定我使用的功能何时添加到 Android SDK 但有一个简单的解决方案可以完全满足 OP 的要求:
正如预期的那样,将 layout:width 和 layout:height 设置为 fill_parent。
正如另一个响应者正确提到的那样,使用 src 来查找您的图像,而不是背景。
但是,不要尝试 fit_xy 的 scaleType(它会找到适合视图的最窄边而不是最长边),而是使用 centerCrop 的 scaleType。
centerCrop 将居中并填充视口,同时保持纵横比。
希望这可以帮助!我将它用于我为当前雇主开发的商业应用程序的 webView 加载覆盖。
复制/粘贴解决方案:在您的活动 XML 文件中,添加以下行:
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:scaleType="centerCrop"
android:src="@drawable/your_image_name"
/>
有两种方法:首先找到显示的高度和宽度,然后调用这个方法
private void scaleImage(int displayWidth) {
// Get the ImageView and its bitmap
width=displayWidth;
Drawable drawing = holder.imagepost.getDrawable();
{
Bitmap bitmap = ((BitmapDrawable) drawing).getBitmap();
int bounding = dpToPx(width);
// Determine how much to scale: the dimension requiring less
// scaling is
// closer to the its side. This way the image always stays
// inside your
// bounding box AND either x/y axis touches it.
float xScale = ((float) bounding) / width;
float yScale = ((float) bounding) / height;
float scale = (xScale <= yScale) ? xScale : yScale;
// Create a matrix for the scaling and add the scaling data
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
// Create a new bitmap and convert it to a format understood by
// the ImageView
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,
height, matrix, true);
width = scaledBitmap.getWidth(); // re-use
height = scaledBitmap.getHeight(); // re-use
BitmapDrawable result = new BitmapDrawable(scaledBitmap);
// Apply the scaled bitmap
holder.imagepost.setImageDrawable(result);
// Now change ImageView's dimensions to match the scaled image
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.imagepost
.getLayoutParams();
params.width = width;
params.height = height;
holder.imagepost.setLayoutParams(params);
}
}
private int dpToPx(int dp) {
float density = context.getResources().getDisplayMetrics().density;
return Math.round((float) dp * density);
}
或者我知道的最好的方法是使用 Android Query
这是链接http://code.google.com/p/android-query/ ,您可以从那里自行下载。下面是保持纵横比的代码
aq.id(R.id.imageView)
.image(imageString, true, true,
displaywidth, 0, null, AQuery.FADE_IN, AQuery.RATIO_PRESERVE);
下面的解决方案对我来说很好。
使用 AQuery Libray 选项“AQuery.RATIO_PRESERVE”来保持纵横比:
aq.id(R.id.imgView).progress(R.id.imgPb).image(url, true, true,150, 0,null,AQuery.FADE_IN,AQuery.RATIO_PRESERVE);
对 ImageView 使用以下设置:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"/>
对自动 GridView 列使用以下设置:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="150dp"/>