<pre name="code" class="java">
public class MyFrameLayoutRectangle10 extends FrameLayout {
private float ratio = 2.24f;// 宽高比
public MyFrameLayoutRectangle10(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public MyFrameLayoutRectangle10(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyFrameLayoutRectangle10(Context context) {
super(context);
}
public void setRatio(int ratio) {
this.ratio = ratio;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
widthSize = widthSize - getPaddingLeft() - getPaddingRight();
// int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
widthSize = widthSize - getPaddingLeft() - getPaddingRight();
// TODO 宽度是精确值,如果宽高比相反,这里的"*"变为"/"
heightSize = (int) (widthSize / ratio + 0.5f);
widthSize = widthSize + getPaddingLeft() + getPaddingRight();
heightSize = heightSize + getPaddingTop() + getPaddingBottom();
widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize,
MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize,
MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// setMeasuredDimension(measuredWidth, measuredHeight);//两者等价
}
}
使用时:
<pre name="code" class="java"> <span style="white-space:pre"> </span><net.bangbao.ui.custom.MyFrameLayoutRectangle10
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="45dp" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/measure_result_situation02"
android:contentDescription="@null" />
</net.bangbao.ui.custom.MyFrameLayoutRectangle10>