我有下一個XML佈局:如何保持圖像寬高比上API <18
<?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>
有兩個圖像 「重疊」。
如果我在已安裝Android 4.3或更高版本(> = API 18)的設備上測試應用程序,則圖像寬高比保持完美。但是,如果我在API> = 14 API < = 17之間的設備上測試應用程序,則圖像顯示的「高度窄」很少。
我用旁邊設置正確的大小,但它沒有工作:
// 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>
在這種情況下,我管理「所有」屏幕的觸摸,我不需要獲取圖像的寬度和高度或修改這些值。而隨着fitXY的形象擴大和適應所有的屏幕尺寸,儘管比例不保留。
非常感謝@Doctoror驅動
centerCrop不起作用,頂部和圖像的底部「板缺」,我不知道爲什麼,因爲高度設置爲wrap_content。謝謝你的時間。 – Adrian
@Adrian再次更新。 –
感謝您的解釋!!!我已使用我的解決方案更新了該文章。 – Adrian