最近做了个数据对比界面,在一些产品参数对比中比较常见,大致画了个布局图
1. 首先新建我们自己的水平滑动scrollview,继承HorizontalScrollView
public class HListViewScrollView extends HorizontalScrollView {
public HListViewScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public HListViewScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public HListViewScrollView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
//记录当前触摸的HListViewScrollView
if(null!=this.listener){
listener.setCurrentTouchView(this);
}
return super.onTouchEvent(ev);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
//当当前的HListViewScrollView被触摸时,滑动其它
if(null!=this.listener&&null!=listener.getCurrentTouchView()&&listener.getCurrentTouchView() == this) {
listener.onUIScrollChanged(l, t, oldl, oldt);
}else{
super.onScrollChanged(l, t, oldl, oldt);
}
}
private ScrollChangedListener listener;
public void setScrollChangedListener(ScrollChangedListener listener){
this.listener=listener;
}
public interface ScrollChangedListener{
public void setCurrentTouchView(HListViewScrollView currentTouchView);
public HListViewScrollView getCurrentTouchView();
public void onUIScrollChanged(int l, int t, int oldl, int oldt);
}
}
获取到水平滑动时候的scrollview事件
2. 新建基本接口
public interface VHBaseAdapter {
//表格内容的行数,不包括标题行
public int getContentRows();
//列数
public int getContentColumn();
//标题的view,这里从0开始,这里要注意,一定要有view返回去,不能为null,每一行
// 各列的宽度就等于标题行的列的宽度,且边框的话,自己在这里和下文的表格单元格view里面设置
public View getTitleView(int columnPosition, ViewGroup parent);
//表格正文的view,行和列都从0开始,宽度的话在载入的时候,默认会是以标题行各列的宽度,高度的话自适应
public View getTableCellView(int contentRow, int contentColum, View view, ViewGroup parent);
//每一行的标题
public View getTableRowTitlrView(int contentRow, View view);
//footerview
public View getFooterView(ListView view);
public Object getItem(int contentRow);
//每一行被点击的时候的回调
public void OnClickContentRowItem(int row, View convertView);
}
3. 实现VHBaseAdapter接口,得到适配器, 通过方法获取各个布局
4. 给linearlayout设置上述适配器
5. linearlayout添加标题行LinearLayout,通过LinearLayout添加子布局LinearLayout和HlistviewScrollview
6. linearlayout添加FrameLayout,通过FrameLayout添加listview并实现listview的适配器,并对适配器设置监听器
7. 通过对linearlayout设置scroll事件,实现头部标题的粘性开头
这就是大致的实现思路,其实主要是对view的添加操作