我想拉伸图像以填充宽度并根据宽度调整高度并保持纵横比。我希望它应该覆盖整个宽度(fillparent),imageview的高度应该调整,以保持纵横比。
我尝试过fit_xy,但不适用于我的情况。请帮帮我
答案 0 :(得分:10)
即使您设置了比例类型fit_xy
,也有两种可能的解决方法 1)默认情况下,Android会缩小图像以适合ImageView,保持纵横比。但是,请确保使用android:src="..."
而不是android:background="..."
将图像设置为ImageView。 src=
使其缩放图像维持宽高比,但background=
使缩放和使图像失真,使其完全符合ImageView的大小。 (您可以同时使用背景和源,这对于仅使用一个ImageView在主图像周围显示框架等内容非常有用。)
2)您还应该看到android:adjustViewBounds
以使ImageView调整自身大小以适应重新缩放的图像。例如,如果在通常为正方形的ImageView中有一个矩形图像,adjustViewBounds = true将使ImageView的大小也变为矩形。这会影响其他视图在ImageView周围的布局方式。
您可以使用android:scaleType
参数更改默认缩放图像的方式。顺便说一下,发现它是如何工作的最简单方法就是自己试验一下!请记住在模拟器本身(或实际手机)中查看布局,因为Eclipse中的预览通常是错误的。
答案 1 :(得分:3)
我不确定我使用的功能何时添加到Android SDK中,但有一个简单的解决方案可以完全满足OP的需求:
正如预期的那样,设置layout:width和layout:height to 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"
/>
答案 2 :(得分:2)
有两种方法可以做到这一点: 首先找到显示高度和宽度并调用此方法
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查询
这是链接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);
答案 3 :(得分:1)
以下解决方案对我来说很好。
使用AQuery Libray选项&#34; AQuery.RATIO_PRESERVE&#34;保持宽高比:
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"/>