带悬停标题的ExpandableListView

1. 需求说明

在某一个分组内部滚动时,要求分组标题悬停,当滚出该分组范围时,把标题顶出去,悬停下一个分组的标题。点击悬停的一级列表能正常收缩展开。

本文主要借鉴

Android自定义ViewGroup(二)——带悬停标题的ExpandableListView

下面整理本地实现过程。

2. 实现原理

悬停标题是画上去的,而不是加到view hierarchy里去,具体根据滚动的情况确定如何画。

自定义控件,该控件继承ExpandableListView类,并有一个View成员变量,用以表示悬停的一级列表。

3. ExpandableListView的使用简介

步骤简述:

  1. ExpandableListView的布局
  2. 要显示的数据
  3. 一级列表和二级列表的布局
  4. ExtendableListViewAdapter自定义适配器,为ExpandableListView提供数据
  5. Activity调用
  6. 绑定ExpandableListViewExtendableListViewAdapter
  7. 加入点击监听

详细可参见另一篇

ExpandableListView的使用简介

4. 自定义控件简介

带悬停标题的ExpandableListView是自定义控件,在实现复杂的代码之前,先了解下自定义控件。

4.1 自定义View的步骤

  1. 布局
    • 自定义View的属性
    • XML或Java代码控制布局
      • 测量——onMeasure(int,int)(该函数可重写可不重写,具体看需求)
      • 布局——onLayout(boolean,int,int,int,int)
      • 绘制——onDraw(Canvas canvas)
  2. 处理逻辑
    • 构造函数(获得View属性值,初始化等)
    • 自定义处理逻辑
    • 事件响应(onClickonScroll等)
  3. 提供数据(数据和处理逻辑分开,Adapter)
  4. 使用
    • layout
    • Activity

4.2 Android自定义控件的三种实现方法

  1. 组合原生控件(用到的步骤最少)
  2. 自己绘制(用到的步骤最多)
  3. 继承原生控件

详细可参见另一篇文章

自定义控件简介

5. 自定义控件DockingExapandableListView

ExpandableListView选择了哪个group后,让它滑到该group

参见

ExpandableListView选择了哪个group后,让它滑到该group。。怎么做?

1
setSelectedGroup

自定义一级列表的展开箭头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        @Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder groupViewHolder;

if (convertView == null) {
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_layout, parent, false);
groupViewHolder = new GroupViewHolder();
groupViewHolder.tvTitle = (TextView) convertView.findViewById(R.id.text1);
+ groupViewHolder.tvImg = (ImageView) convertView.findViewById(R.id.group_view_status_img) ;
convertView.setTag(groupViewHolder);
} else {
groupViewHolder = (GroupViewHolder) convertView.getTag();
}
groupViewHolder.tvTitle.setText(groups[groupPosition]);
+ if(isExpanded) {
+ groupViewHolder.tvImg.setImageResource(R.drawable.ic_drop_up);
+ }
+ else{
+ groupViewHolder.tvImg.setImageResource(R.drawable.ic_drop_down);
+ }
return convertView;

}

参考文献

Android自定义ViewGroup(二)——带悬停标题的ExpandableListView
developer.android.com–ExpandableListView
二级菜单——ExpandableListView以及用RecyclerView实现
安卓的ExpandableListView的使用和优化
ExpandableListView选择了哪个group后,让它滑到该group。。怎么做?
Android自定义控件View(一)