我有下一个xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:gravity="center_vertical"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/my_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#fff"
android:gravity="center_vertical" >
<ImageView
android:id="@+id/image_areas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:adjustViewBounds="true"
android:background="#9a05e7"
android:scaleType="fitXY"
android:src="@drawable/mapa_mask"
android:visibility="invisible"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:adjustViewBounds="true"
android:background="#fff"
android:scaleType="fitXY"
android:src="@drawable/mapa_default"
android:visibility="visible"
tools:ignore="ContentDescription" />
</RelativeLayout>
有两张图片&#34;重叠&#34;。
如果我在安装了Android 4.3或更高版本(&gt; = API 18)的设备上测试应用,则图像宽高比仍然很完美。但是如果我在API&gt; = 14 API&lt; = 17之间的设备上测试App,则图像显示很少&#34;高度窄&#34;。
我使用下一个来设置正确的尺寸,但它没有工作:
// load the original BitMap (768 x 583 px)
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
R.drawable.mapa_default);
// iv is an ImageView referenced in onCreate (mapa_default)
int width = bitmapOrg.getWidth();
int height = bitmapOrg.getHeight();
int newWidth = iv.getWidth();
int newHeight = heightRealImg;
// calculate the scale
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width,
height, matrix, true);
// make a Drawable from Bitmap to allow to set the BitMap
// to the ImageView, ImageButton or what ever
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
// set the Drawable on the ImageView
iv.setImageDrawable(bmd);
// center the Image
iv.setScaleType(ScaleType.FIT_XY);
iv.setAdjustViewBounds(true);
这次崩溃是因为iv.getWidth返回0.我认为这是因为布局尚未完成加载。
如何保持图像宽高比? 感谢
我的解决方案:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/my_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#fff"
android:gravity="center_vertical" >
<ImageView
android:id="@+id/image_areas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:background="#9a05e7"
android:scaleType="fitXY"
android:src="@drawable/mapacyl_mask"
android:visibility="invisible"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:scaleType="fitXY"
android:src="@drawable/mapacyl"
android:visibility="visible"
tools:ignore="ContentDescription" />
</RelativeLayout>
在这种情况下,我管理了所有&#34;屏幕,我不需要获取图像的宽度和高度或修改这些值。使用fitXY,图像可以扩展并适应所有屏幕尺寸,但这个比例并没有保留。
非常感谢@Doctoror Drive
答案 0 :(得分:3)
为什么不使用
android:scaleType="centerCrop"?
编辑: 您无需在代码中执行任何其他操作。
你误解了wrap_content和scale类型的含义。
wrap_content意味着视图将与图像一样小,并且不大于它的父边界。
fitXY意味着将调整图像大小以适应整个ImageView而不保留纵横比。 canterCrop意味着
均匀缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或大于视图的相应尺寸(减去填充)。
所以也许你想尝试
android:scaleType="centerInside"
均匀缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充)。