Я нашел решение самостоятельно, но я не совсем уверен, что оно правильно в любой ситуации.Я создал подкласс ImageView (CustomImageView) и определил метод onMeasure () следующим образом:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable drawable = getDrawable();
if (drawable != null) {
int measureHeight = View.MeasureSpec.getSize(heightMeasureSpec);
int measureWidth = View.MeasureSpec.getSize(widthMeasureSpec);
int resultWidth = measureWidth;
float scaleFactor = (float)resultWidth / drawable.getMinimumWidth();
int resultHeight = (int)(scaleFactor * drawable.getMinimumHeight());
if (resultHeight > measureHeight) {
resultHeight = measureHeight;
scaleFactor = (float)resultHeight / drawable.getMinimumHeight();
resultWidth = (int)(scaleFactor * drawable.getMinimumWidth());
}
setMeasuredDimension(resultWidth, resultHeight);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Мой макет теперь выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageParent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip">
<ProgressBar
android:id="@android:id/progress"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_centerInParent="true"
style="@android:attr/progressBarStyleSmallTitle"
android:visibility="gone"/>
<com.example.CustomImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:id="@+id/image"/>
</RelativeLayout>