使用ViewGrop简单实现流布局

  • 无聊中的我随手敲一个流布局的核心部分代码,后续再封装成一个工具类
  • 运行效果图

在这里插入图片描述

ViewGroup01 .java

package -----------------------------------------

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

public class ViewGroup01 extends ViewGroup {

    public ViewGroup01(Context context) {
        this(context,null);
    }

    public ViewGroup01(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ViewGroup01(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setBackgroundColor(Color.WHITE);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int w = 0;
        int h = 0;
        int width=getResources().getDisplayMetrics().widthPixels;
        int childCount=getChildCount();
        for (int i=0;i<childCount;i++){
            View measureView=getChildAt(i);
            measureChild(measureView,widthMeasureSpec,heightMeasureSpec);
            int childWidth=measureView.getMeasuredWidth();
            int childHeight=measureView.getMeasuredHeight();
            if(h==0){
                h = childHeight;
            }
            w+=childWidth;
            if (w > width ){
                w=childWidth;
                h+=childHeight;
            }
        }
        setMeasuredDimension(width,h);
    }



    /**
     * 像素装dp
     *
     * @param px
     * @return
     */
    public int pxToDp(int px){
        float scale = getResources().getDisplayMetrics().density;
        float dp=  (px/scale+0.5f);
        return (int) dp;
    }



    /**
     * 测量高度
     *
     * @param heightMeasureSpec
     * @return
     */
    private int MeasureHeight(int heightMeasureSpec) {
        int MeasureHeight = 0;
        int heightSize=MeasureSpec.getSize(heightMeasureSpec);
        int heightMode=MeasureSpec.getMode(heightMeasureSpec);
        int AT_MOST_H = 200;
        if (heightMode==MeasureSpec.EXACTLY){
            MeasureHeight =  heightSize;
        }else {
            if (heightMode==MeasureSpec.AT_MOST){
                MeasureHeight = Math.min(AT_MOST_H,heightSize);
            }
        }
        return MeasureHeight;
    }

    /**
     * 测量宽度
     *
     * @param widthMeasureSpec
     * @return
     */
    private int MeasureWidth(int widthMeasureSpec) {
        int MeasureWidth = 0;
        int widthSize=MeasureSpec.getSize(widthMeasureSpec);
        int widthMode=MeasureSpec.getMode(widthMeasureSpec);
        int AT_MOST_W = 200;
        if (widthMode==MeasureSpec.EXACTLY){
            MeasureWidth =  widthSize;
        }else {
            if (widthMode==MeasureSpec.AT_MOST){
                MeasureWidth = Math.min(AT_MOST_W,widthSize);
            }
        }
        return MeasureWidth;
    }


    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int w = 0;
        int h = 0;
        int childCount=getChildCount();
        for (int i=0;i<childCount;i++){
            View measureView=getChildAt(i);
            int childWidth=measureView.getMeasuredWidth();
            int childHeight=measureView.getMeasuredHeight();
            /**
             * 这里是重点啊为什么  加一个childWidth
             *
             * 因为layout(w,h,childWidth+w,h+childHeight); 中的w是从0开始的
             *
             * 如果不加childWidth  那么整行会往后移动一个节点的子view的宽度
             *
             */
            if ((w +childWidth) >  getWidth()){
                w = 0;
                h+=childHeight;
            }
            measureView.layout( w, h,childWidth+w,h+childHeight);
            w+=childWidth;
        }
    }
}

xml文件


            <com.live.jbhlivemobilev2.view.ViewGroup01
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/> <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>

                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/> <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>   <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打饭示范点"/>

                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/><Button
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/><Button
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/><Button
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/><Button
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/><Button
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/><Button
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>


                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点"/>
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="打饭示范点打饭示范点打饭示范点"/>
                <Button
                    android:layout_width="50dp"
                    android:layout_height="wrap_content"
                    android:text="点"/>
            </com.live.jbhlivemobilev2.view.ViewGroup01>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值