Android实现正方形View

Google插件,此处点击进入购买可多获得10天VIP使用权

我们在开发的时候,是不是有这样的需求呢?
1.xxxLayout是个正方形;
2.xxxView是个正方形;
我们下面就以具体的情景来做一次简单的开发来满足我们的需求

情景1

创建一个RelativeLayout,满足高度等于宽度,宽度是填充父容器,这样来满足我们不论在何种屏幕尺寸下面,都能很好的适配,下面贴代码

我们先自定义一个 class SquareRelativeLayout extends RelativeLayout

public class SquareRelativeLayout extends RelativeLayout {
    public SquareRelativeLayout(Context context) {
        super(context);
    }
    public SquareRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public SquareRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
                /重写此方法后默认调用父类的onMeasure方法,分别将宽度测量空间与高度测量空间传入
super.onMeasure(widthMeasureSpec, heightMeasureSpec);/
    }
}

这里其实我只是简单的重写了onMeasure()方法,要求是高度要等于宽度,所以我们就直接在调用父类的onMeasure()方法时把宽度的测量空间直接传值给了高度的测量空间参数

效果图1(宽度=”match_parent”,高度就算我们在布局时写0dp,照样可以使高度等于宽度):

Android实现正方形View_第1张图片

效果图2(宽度=”100dp”,高度就算我们在布局时写500dp,照样可以使高度等于宽度):

Android实现正方形View_第2张图片

情景2

创建一个ImageView,满足宽度等于高度,下面贴代码

public class SquareImageView extends ImageView {
    public SquareImageView(Context context) {
        super(context);
    }
    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, heightMeasureSpec);
    }
}

关键代码

   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, heightMeasureSpec);
    }

把高度测量空间传给宽度测量空间

效果图:

Android实现正方形View_第3张图片

PS:实现正方形控件就这么简单,如果我们想实现固定比例控件,也是同样的思路,重写onMeasure()方法,然后在此方法中实现逻辑代码

你可能感兴趣的:(Android)