自定义viewgroup

来源:互联网 发布:读英语单词的软件 编辑:程序博客网 时间:2024/06/01 11:52

要做成这种效果

首先自定义一个viewgrup,让左边的view,位于右边圆圆心为起点,可伸缩


package com.xubaipei.viewlib;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.RelativeLayout;/** * Created by Administrator on 2016/10/7. */public class FloatButtonMenu extends ViewGroup {    public FloatButtonMenu(Context context) {        super(context);    }    public FloatButtonMenu(Context context, AttributeSet attrs) {        super(context, attrs);    }    public FloatButtonMenu(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int widthMode = MeasureSpec.getMode(widthMeasureSpec);        int heightMode = MeasureSpec.getMode(heightMeasureSpec);        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);        int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);        View menuBtnView = getChildAt(1);        View menuView = getChildAt(0);        int width;        int height;        measureChildren(widthMeasureSpec,heightMeasureSpec);        width = menuView.getMeasuredWidth() + getPaddingLeft() -  menuBtnView.getWidth() / 2 ;        width = width + menuBtnView.getMeasuredWidth() + getPaddingRight();        height = menuBtnView.getMeasuredHeight() + getPaddingTop() + getPaddingBottom();        setMeasuredDimension(width,height);    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        View menuBtnView = getChildAt(1);        View menuView = getChildAt(0);        menuBtnView.layout(menuView.getMeasuredWidth() - menuBtnView.getMeasuredWidth() / 2, 0, menuBtnView.getMeasuredWidth() + menuView.getMeasuredWidth() - menuBtnView.getMeasuredWidth() / 2, menuBtnView.getMeasuredHeight());        menuView.getMeasuredHeight();        menuBtnView.getMeasuredHeight();        int top = menuBtnView.getMeasuredHeight()/2 - menuView.getMeasuredHeight()/2;        menuView.layout(0,top,menuView.getMeasuredWidth(),top+menuView.getMeasuredHeight());    }}
练手

其中onLayout()中的参数l t r b 包括了viewgrup的parentview的padding和自己margin的值

0 0
原创粉丝点击