У меня есть это FrameLayout:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/searchresult_picture_layout"
android:background="@drawable/img_bkgd_results_patch">
<ProgressBar
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center"
android:id="@+id/searchresult_progressbar"
android:indeterminate="true"
android:visibility="gone"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/searchresult_picture"
android:layout_gravity="center"
android:scaleType="centerCrop"/>
</FrameLayout>
И я хочу, чтобы FrameLayout был таким же большим, как фон, который я передаю. Если ImageView больше, чем фон для FrameLayout, я хочу, чтобы ImageView масштабировался, чтобы соответствовать, а не растягивать макет.
Я попытался сделать нестандартный макет, но я думаю, что на самом деле. Вот где я попал:
public class PolaroidFrameLayout extends FrameLayout {
public PolaroidFrameLayout(Context context) {
super( context );
}
public PolaroidFrameLayout(Context context, AttributeSet attrs) {
super( context, attrs );
}
public PolaroidFrameLayout(Context context, AttributeSet attrs, int defStyle) {
super( context, attrs, defStyle );
}
@Override
protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec ) {
Drawable background = getBackground();
int backgroundWidth = background.getMinimumWidth();
int backgroundHeight = background.getMinimumHeight();
setMeasuredDimension( backgroundWidth, backgroundHeight );
for (int i = 0; i < getChildCount(); i++) {
View v = getChildAt( i );
int viewWidth = v.getWidth();
int viewHeight = v.getHeight();
v.measure( MeasureSpec.makeMeasureSpec( Math.min( backgroundWidth, viewWidth ), MeasureSpec.AT_MOST ), MeasureSpec.makeMeasureSpec( Math.min( backgroundHeight, viewHeight ), MeasureSpec.AT_MOST ) );
}
}
}
Макет остается желаемого размера, но дети никогда не рисуются. Что еще мне нужно переопределить, чтобы это работало?
Спасибо за любой вклад.