android自定义viewgroup实现等分格子布局_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > android自定义viewgroup实现等分格子布局

android自定义viewgroup实现等分格子布局

 2013/12/19 18:09:18  流星剑  博客园  我要评论(0)
  • 摘要:先上效果图:实现这样的效果:一般的思路就是,直接写布局文件,用LinearLayout嵌套多层子LinearLayout,然后根据权重layout_weight可以达到上面的效果还有就是利用gridview了,但是这里的需求就是不能上下滑动,使用gridview的时候还要计算布局的高度,否则内容超出下滑;开始我是用的第一种,直接在布局文件实现了,但是后来发现代码太多太恶心哦,所以我继承viewGroup,重写两个关键的方法:onLayout(),onMeasure()我的大致思路:1
  • 标签:android 实现 view 自定义 viewgroup

先上效果图:

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8++OCvv/6KTYnOHniBUwL/HzhwgE0cNkNBW44i6B07diD4UATdt29fLERRhHbnz5+PF7t27Ro1atRIA2VlZeqNCEGbVLkGFG8K2looaCsQN/06deqkX6ezUNA7d+786quvxo0bN0bFu+++e+jQIQraZihoy1EEjaBYFEtNG/T999+PhZ999ply48S41gibY83HHntMP4IW9OvXrz6+qBtDQVtNQUGBowT9ySefZGVlpas4f/78wYMHKWiboaAtRxE0Km3Hjh0z183u4YcfxmtN4KwwYcIERMc33nij6LCkz0X+ghJAQVuNAwX9xRdf9O/fv5+Kf/3rXxS0PVDQlqMIWvGySUGPGDECr3ft2mWywC9cuBCC5swbToKCthoHClppgFb4448/2MRhDxS05VRUVHz88cfXXnstCt6yZctg2Oeff/6OO+7QCBrLjx49+vPPP2N944089dRTKLR9+/a9+Md/KUBBW42jBN2nT59x48adP3/+rbfeQj3x9OnT//d//zdx4sTKykoRjFDQNkBBWw6KGUrX6tWrESgMHDhw8eLFubm5olRresUNHz78l19++cc//pGfn6/eQl5e3tdff/3NN9+wlDoJCtpq1IIuKioyXsHyftBdunT54Ycfdu/ejSX79+9XmqQR1GAvFLQNUNBWgWKGMvbKK69A0D/99NN9992nEXROTs5tt92G/9euXQuPI5QuLCxUPr5ixQosfOSRR9g3w0lQ0FajCHr9+vVQaklJiWYFCwVdXFwMBaN8IzyBlCHozz//HG9B+ohWcFbgtKGgrYWCtgrRQDF16lSUwLvvvvvXX38VEygKQR8+fPjChQsojaNGjYKC9+3bh+KKOFqMfe3evTvqfFitvLy8vr+HtFDQViME/fbbb6OwPvroo8axgyWCXrp06WeffYZzQ0y/i7cQR2ODr776Kk4ALJ85cyYFbQMUtOUgXkZJ3rlzpyhjHTt2/PLLL19++WUUSIQd4o7I119/PXnyZFFE8f/mzZuVgSoHDhzAClu3bmX47DwoaKvJz89HZRBF85lnnunQoYPxChCruVY5RdCrV69G9LFkyRJltaqqKoQzp06dQi0SZ05ubu65c+c43ai1UNCWM2zYsG3btqlnQbrhhhvmzJkjboFs2LABBbJLly7q7hlwsTJ1TJ8+fR577DGTpwBxFBS0LUyaNElM36UswW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" alt="" />

实现这样的效果:

一般的思路就是,直接写布局文件,用LinearLayout 嵌套多层子LinearLayout,然后根据权重layout_weight可以达到上面的效果

还有就是利用gridview了,但是这里的需求就是不能上下滑动,使用gridview的时候还要计算布局的高度,否则内容超出下滑;

开始我是用的第一种,直接在布局文件实现了,但是后来发现代码太多太恶心哦,所以我继承viewGroup,重写两个关键的方法:onLayout(),onMeasure()

我的大致思路:

1.计算当前视图宽度和高度,然后根据边距,算出每个布局的item需要分配的多少宽度和高度:

2.支持adapter的方式,动态添加每一项,还可以设置每一项点击事件

好了,直接上关键代码:

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        mMaxChildWidth = 0;
        mMaxChildHeight = 0;

        int modeW = 0, modeH = 0;
        if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED)
            modeW = MeasureSpec.UNSPECIFIED;
        if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.UNSPECIFIED)
            modeH = MeasureSpec.UNSPECIFIED;

        final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
                MeasureSpec.getSize(widthMeasureSpec), modeW);
        final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
                MeasureSpec.getSize(heightMeasureSpec), modeH);

        count = getChildCount();
        if (count == 0) {
            super.onMeasure(childWidthMeasureSpec, childHeightMeasureSpec);
            return;
        }
        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() == GONE) {
                continue;
            }

            child.measure(childWidthMeasureSpec, childHeightMeasureSpec);

            mMaxChildWidth = Math.max(mMaxChildWidth, child.getMeasuredWidth());
            mMaxChildHeight = Math.max(mMaxChildHeight,
                    child.getMeasuredHeight());
        }
        setMeasuredDimension(resolveSize(mMaxChildWidth, widthMeasureSpec),
                resolveSize(mMaxChildHeight, heightMeasureSpec));
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // TODO Auto-generated method stub
        int height = b - t;// 布局区域高度
        int width = r - l;// 布局区域宽度
        int rows = count % colums == 0 ? count / colums : count / colums + 1;// 行数
        if (count == 0)
            return;
        int gridW = (width - margin * (colums - 1)) / colums;// 格子宽度
        int gridH = (height - margin * rows) / rows;// 格子高度

        int left = 0;
        int top = margin;

        for (int i = 0; i < rows; i++) {// 遍历行
            for (int j = 0; j < colums; j++) {// 遍历每一行的元素
                View child = this.getChildAt(i * colums + j);
                if (child == null)
                    return;
                left = j * gridW + j * margin;
                // 如果当前布局宽度和测量宽度不一样,就直接用当前布局的宽度重新测量
                if (gridW != child.getMeasuredWidth()
                        || gridH != child.getMeasuredHeight()) {
                    child.measure(makeMeasureSpec(gridW, EXACTLY),
                            makeMeasureSpec(gridH, EXACTLY));
                }
                child.layout(left, top, left + gridW, top + gridH);
                // System.out
                // .println("--top--" + top + ",bottom=" + (top + gridH));

            }
            top += gridH + margin;
        }
    }

class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('0afece08-239f-442f-bcb0-7a82bf6a4083',event)" src="/Upload/Images/2013121918/2B1B950FA3DF188F.gif" alt="" />

要实现adapter也很简单,自定义一个接口,下面给出完整的代码

package com.allen.view;

import static android.view.View.MeasureSpec.EXACTLY;
import static android.view.View.MeasureSpec.makeMeasureSpec;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;

import com.allen.mygridlayout.R;


/**
 * @author allen
 * @email jaylong1302@163.com
 * @date 2013-11-26 下午1:19:35
 * @company 富媒科技
 * @version 1.0
 * @description 格子布局(类似4.0中的gridlayout)
 */
public class MyGridLayout extends ViewGroup {
    private final String TAG = "MyGridLayout";

    int margin = 2;// 每个格子的水平和垂直间隔
    int colums = 2;
    private int mMaxChildWidth = 0;
    private int mMaxChildHeight = 0;
    int count = 0;

    GridAdatper adapter;

    public MyGridLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if (attrs != null) {
            TypedArray a = getContext().obtainStyledAttributes(attrs,
                    R.styleable.MyGridLayout);
            colums = a.getInteger(R.styleable.MyGridLayout_numColumns, 2);
            margin = (int) a.getInteger(R.styleable.MyGridLayout_itemMargin, 2);
        }
    }

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

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        mMaxChildWidth = 0;
        mMaxChildHeight = 0;

        int modeW = 0, modeH = 0;
        if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED)
            modeW = MeasureSpec.UNSPECIFIED;
        if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.UNSPECIFIED)
            modeH = MeasureSpec.UNSPECIFIED;

        final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
                MeasureSpec.getSize(widthMeasureSpec), modeW);
        final int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
                MeasureSpec.getSize(heightMeasureSpec), modeH);

        count = getChildCount();
        if (count == 0) {
            super.onMeasure(childWidthMeasureSpec, childHeightMeasureSpec);
            return;
        }
        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() == GONE) {
                continue;
            }

            child.measure(childWidthMeasureSpec, childHeightMeasureSpec);

            mMaxChildWidth = Math.max(mMaxChildWidth, child.getMeasuredWidth());
            mMaxChildHeight = Math.max(mMaxChildHeight,
                    child.getMeasuredHeight());
        }
        setMeasuredDimension(resolveSize(mMaxChildWidth, widthMeasureSpec),
                resolveSize(mMaxChildHeight, heightMeasureSpec));
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // TODO Auto-generated method stub
        int height = b - t;// 布局区域高度
        int width = r - l;// 布局区域宽度
        int rows = count % colums == 0 ? count / colums : count / colums + 1;// 行数
        if (count == 0)
            return;
        int gridW = (width - margin * (colums - 1)) / colums;// 格子宽度
        int gridH = (height - margin * rows) / rows;// 格子高度

        int left = 0;
        int top = margin;

        for (int i = 0; i < rows; i++) {// 遍历行
            for (int j = 0; j < colums; j++) {// 遍历每一行的元素
                View child = this.getChildAt(i * colums + j);
                if (child == null)
                    return;
                left = j * gridW + j * margin;
                // 如果当前布局宽度和测量宽度不一样,就直接用当前布局的宽度重新测量
                if (gridW != child.getMeasuredWidth()
                        || gridH != child.getMeasuredHeight()) {
                    child.measure(makeMeasureSpec(gridW, EXACTLY),
                            makeMeasureSpec(gridH, EXACTLY));
                }
                child.layout(left, top, left + gridW, top + gridH);
                // System.out
                // .println("--top--" + top + ",bottom=" + (top + gridH));

            }
            top += gridH + margin;
        }
    }

    public interface GridAdatper {
        View getView(int index);

        int getCount();
    }

    /** 设置适配器 */
    public void setGridAdapter(GridAdatper adapter) {
        this.adapter = adapter;
        // 动态添加视图
        int size = adapter.getCount();
        for (int i = 0; i < size; i++) {
            addView(adapter.getView(i));
        }
    }

    public interface OnItemClickListener {
        void onItemClick(View v, int index);
    }

    public void setOnItemClickListener(final OnItemClickListener click) {
        if (this.adapter == null)
            return;
        for (int i = 0; i < adapter.getCount(); i++) {
            final int index = i;
            View view = getChildAt(i);
            view.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    click.onItemClick(v, index);
                }
            });
        }
    }

}
View Code

 

这里我给出完整的demo下载:click me!!!

 

     
发表评论
用户名: 匿名