Android ExpandableListView 实现 QQ 好友列表效果

我们知道 QQ 好友列表分类使用 ExpandableListView 实现的,但是它在此基础上做改进,如打开分组,滑动时组标题会悬浮在最上端,方便用户关闭分组。

效果类似于下图:


实现代码如下所示:

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {
    //防止三星,魅族等手机第一个条目可以一直往下拉,父条目和悬浮同时出现的问题
    if(firstVisibleItem==0){
        view_flotage.setVisibility(View.GONE);
    }
    // 控制滑动时TextView的显示与隐藏
    int npos = view.pointToPosition(0, 0);
    if (npos != AdapterView.INVALID_POSITION) {
        long pos = expandableList.getExpandableListPosition(npos);
        int childPos = ExpandableListView.getPackedPositionChild(pos);
        final int groupPos = ExpandableListView.getPackedPositionGroup(pos);
        if (childPos == AdapterView.INVALID_POSITION) {
            View groupView = expandableList.getChildAt(npos
                    - expandableList.getFirstVisiblePosition());
            indicatorGroupHeight = groupView.getHeight();
        }
        
        if (indicatorGroupHeight == 0) {
            return;
        }
        // if (isExpanded) {
        if (count_expand > 0) {
            the_group_expand_position = groupPos;
            group_content.setText(groupData.get(the_group_expand_position)
                    .get("group_text"));
            if (the_group_expand_position != groupPos||!expandableList.isGroupExpanded(groupPos)) {
                view_flotage.setVisibility(View.GONE);
            } else {
                view_flotage.setVisibility(View.VISIBLE);
            }
        }
        if (count_expand == 0) {
            view_flotage.setVisibility(View.GONE);
        }
    }

    if (the_group_expand_position == -1) {
        return;
    }
    /**
     * calculate point (0,indicatorGroupHeight)
     */
    int showHeight = getHeight();
    MarginLayoutParams layoutParams = (MarginLayoutParams) view_flotage
            .getLayoutParams();
    // 得到悬浮的条滑出屏幕多少
    layoutParams.topMargin = -(indicatorGroupHeight - showHeight);
    view_flotage.setLayoutParams(layoutParams);
}

有的手机品牌不一样可能会出现如下情况:


所以需要加上如下代码:

//防止三星,魅族等手机第一个条目可以一直往下拉,父条目和悬浮同时出现的问题
if(firstVisibleItem==0){
    view_flotage.setVisibility(View.GONE);
}

本文 Demo 下载地址:http://download.csdn.net/detail/johnny901114/4513242

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Chiclaim

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

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

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

打赏作者

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

抵扣说明:

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

余额充值