Android瀑布流StaggeredGridView学习研究

这篇博客深入探讨了Android瀑布流控件StaggeredGridView,主要基于etsy的源码进行解析。内容包括列数定义、每个视图宽度计算、Header和Footer的添加、子视图尺寸确定以及点击项的高亮实现。通过示例代码和效果图,详细解释了StaggeredGridView的工作原理和自定义方法。
摘要由CSDN通过智能技术生成

       关于Android瀑布流控件,已经在江湖上,流传已久,超过两年时间了。网上也有很多相关学习资源,可以拿来研究学习。github上,就有两个资源,可以供学习者膜拜。

1.https://github.com/maurycyw/StaggeredGridView    此链接有图片加载功能,但功能相对简单些。

2.https://github.com/etsy/AndroidStaggeredGrid  提供的瀑布流功能强大,可以自定义瀑布流列数。

      本篇博客,就讲解etsy的源码为主了。首先看效果图:

                                                                         

首先明确StaggeredGridView中几个变量的定义:

    private int mColumnCount;  /*程序默认瀑布流的列数,默认情况,通过资源文件中的integers.xml 中grid_column_count定义*/
    private int mItemMargin;   /*程序默认瀑布流的的margin,通过layout文件activity_sgv.xml中的app:item_margin="8dp"定义*/
    private int mColumnWidth;   /*程序瀑布流的列宽变量*/
    private boolean mNeedSync;
    private int mColumnCountPortrait = DEFAULT_COLUMNS_PORTRAIT; /*程序瀑布流竖屏列数*/
    private int mColumnCountLandscape = DEFAULT_COLUMNS_LANDSCAPE;/*程序瀑布流横屏列数*/
针对瀑布流,搞清楚如下几个问题,也算是吃透其中的原理了。

1.瀑布流的列数定义好了后,如何计算每列的宽度?
2.瀑布流的列数定义好了后,如何计算每列的高度?
3.瀑布流的HeaderView是如何添加的,其高度宽度如何确定?
4.瀑布流的FooterView是如何添加的,其高度宽度如何确定?
5.点击瀑布流的item时,高亮和默认背景的selector如何来实现?

一.瀑布流的列数定义好了后,如何计算每列的宽度?

     进入StaggeredGridActivity界面,瀑布流的UI效果已经出来了,主要看com.etsy.android.grid.StaggeredGridView的onMeasure方法,确定每一个view的尺度.

    @Override
    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if (mColumnCount &
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值