固定电话冲qq币,实现类似手机QQ的可折叠固定标题列表

在上篇文章中,简单的模拟了手机QQ列表的列表功能,实现了一级标题的固定功能,但是一级标题靠近时往上推到细节并没有实现。偶然发现android系统自带到联系人列表就是可以固定标题头到,并且实现了往上推动的效果,于是参考android源代码(PinnedHeaderListView)的实现,让ExpandableListView也有类似功能。 效果如下:
实现类似手机QQ的可折叠固定标题列表固定电话冲qq币
实现到原理类似于之前到文章:
/** * @author douzifly * * @Date 2011-9-13 */ /** * 可固定标题的ExpandableListView * * @author douzifly * @date 2011-9-13 */ public class PinnedExpandableListView extends ExpandableListView implements _disibledevent=>
一般情况下,通过继承该类来使用,列表标题当前的状态(可见,不可见,正在推动)由Adapter来决定,所以Adapter里面的代码就相当重要了。以下是我的一个实现:
@Override public int getPinnedHeaderState(int groupPosition, int childPosition) { final int childCount = getChildrenCount(groupPosition); if(childPosition == childCount - 1){ return PINNED_HEADER_PUSHED_UP; }else if(childPosition == -1 && !BlockListView.this.isGroupExpanded(groupPosition)){ return PINNED_HEADER_GONE; }else { return PINNED_HEADER_VISIBLE; } } @Override public void configurePinnedHeader(View header, int groupPosition, int childPosition, int alpha) { TextView pinned = (TextView) header; pinned.setText((String)getGroup(groupPosition)); }

当然需要在子类初始化的地方加上对HeaderView的配置
txtPinned = new TextView(context); txtPinned.setTextSize(mGroupTextSize); txtPinned.setBackgroundResource(mGroupBgDrawableId); AbsListView.LayoutParams lp = new AbsListView.LayoutParams(-1, -2); txtPinned.setLayoutParams(lp); txtPinned.setTextColor(Color.WHITE); setPinnedHeaderView(txtPinned); setOnPinnedHeaderClickLisenter(new _disibledevent=>
这样,上图中的效果就实现了。 需要注意的就是HeaderView并没有加入到ExpandableListView的子控件中,所以要重写dispatchDraw函数,并在里面绘制HeaderView,这样导致一个问题就是直接在HeaderView上面设置的click监听函数无效,所以需要重写onTouchEvent来模拟在HeaderView上的OnClick事件。


Tags: 

延伸阅读

最新评论

发表评论