首先看一下方形ImageView,其他的方形View相同
public class PolaroidSquaredImageView extends ImageView {
public PolaroidSquaredImageView(Context context) {
super(context);
}
public PolaroidSquaredImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//这里是根据高度来固定正方形的边长
setMeasuredDimension(getMeasuredHeight(), getMeasuredHeight());
//下面是根据宽度来固定正方形的边长
//setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
再看一下正方形的LinearLayout
public class PolaroidSquaredLinearLayout extends LinearLayout {
public PolaroidSquaredLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public PolaroidSquaredLinearLayout(Context context) {
super(context);
}
public PolaroidSquaredLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int size = Math.min(width, height);
// 这里是以高度为正方形的边长. 以宽度为边长类似
super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY));
}
}