解决思路,继承ImageView,重写onMeasure,重新计算图片的高度和宽度,至于不够屏幕高度的时候填满屏幕,直接判断如果小于屏幕高度把屏幕高度赋值给它就行了,重要的一点:xml引用自定义view的时候高度写wrap_content,scaleType是fitXY,加上adjustViewBounds="true"
- 重写onMeasure
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d != null) { int width = MeasureSpec.getSize(widthMeasureSpec); //高度根据使得图片的宽度充满屏幕计算而得 int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth()); //高度不够屏幕高度时填满整个屏幕 if (height < MeasureSpec.getSize(heightMeasureSpec)) height = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(width, height); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
- xml引用
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Main2Activity"> <com.android.yuangui.phone.view.ResizableImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:adjustViewBounds="true" /> </ScrollView>