Android程序开发之ListView实现横向滚动(带表头与固定列)

Android程序开发之ListView实现横向滚动(带表头与固定列),第1张

概述问题背景:在做图表展示的时候,ListView可以上下左右滑动,但最左边一列在向右滑动时,保持不变,表头在向下滑动时保持不变。

问题背景:在做图表展示的时候,ListVIEw可以上下左右滑动,但最左边一列在向右滑动时,保持不变,表头在向下滑动时保持不变。

有用两个ListVIEw实现的,但测试过,好像有些问题

这个例子是通过(ListVIEw + horizontalscrollview)实现的

效果图:

 

Activity代码

/** * * 带滑动表头与固定列的ListVIEw */ public class HListActivity extends Activity{ private ListVIEw mListVIEw; //方便测试,直接写的public public horizontalscrollview mtouchVIEw; //装入所有的HScrollVIEw protected List<CHScrollVIEw> mHScrollVIEws =new ArrayList<CHScrollVIEw>(); @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.scroll); initVIEws(); } private voID initVIEws() { List<Map<String,String>> datas = new ArrayList<Map<String,String>>(); Map<String,String> data = null; CHScrollVIEw headerScroll = (CHScrollVIEw) findVIEwByID(R.ID.item_scroll_Title); //添加头滑动事件 mHScrollVIEws.add(headerScroll); mListVIEw = (ListVIEw) findVIEwByID(R.ID.scroll_List); for(int i = 0; i < 100; i++) { data = new HashMap<String,String>(); data.put("Title","Title_" + i); data.put("data_" + 1,"Date_" + 1 + "_" +i ); data.put("data_" + 2,"Date_" + 2 + "_" +i ); data.put("data_" + 3,"Date_" + 3 + "_" +i ); data.put("data_" + 4,"Date_" + 4 + "_" +i ); data.put("data_" + 5,"Date_" + 5 + "_" +i ); data.put("data_" + 6,"Date_" + 6 + "_" +i ); datas.add(data); } SimpleAdapter adapter = new ScrollAdapter(this,datas,R.layout.item,new String[] { "Title","data_1","data_2","data_3","data_4","data_5","data_6",},new int[] { R.ID.item_Title,R.ID.item_data1,R.ID.item_data2,R.ID.item_data3,R.ID.item_data4,R.ID.item_data5,R.ID.item_data6 }); mListVIEw.setAdapter(adapter); } public voID addHVIEws(final CHScrollVIEw hScrollVIEw) { if(!mHScrollVIEws.isEmpty()) { int size = mHScrollVIEws.size(); CHScrollVIEw scrollVIEw = mHScrollVIEws.get(size - 1); final int scrollX = scrollVIEw.getScrollX(); //第一次满屏后,向下滑动,有一条数据在开始时未加入 if(scrollX != 0) { mListVIEw.post(new Runnable() { @OverrIDe public voID run() { //当ListVIEw刷新完成之后,把该条移动到最终位置 hScrollVIEw.scrollTo(scrollX,0); } }); } } mHScrollVIEws.add(hScrollVIEw); } public voID onScrollChanged(int l,int t,int oldl,int oldt){ for(CHScrollVIEw scrollVIEw : mHScrollVIEws) { //防止重复滑动 if(mtouchVIEw != scrollVIEw) scrollVIEw.smoothScrollTo(l,t); } } class ScrollAdapter extends SimpleAdapter { private List<? extends Map<String,?>> datas; private int res; private String[] from; private int[] to; private Context context; public ScrollAdapter(Context context,List<? extends Map<String,?>> data,int resource,String[] from,int[] to) { super(context,data,resource,from,to); this.context = context; this.datas = data; this.res = resource; this.from = from; this.to = to; } @OverrIDe public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) { VIEw v = convertVIEw; if(v == null) { v = LayoutInflater.from(context).inflate(res,null); //第一次初始化的时候装进来 addHVIEws((CHScrollVIEw) v.findVIEwByID(R.ID.item_scroll)); VIEw[] vIEws = new VIEw[to.length]; for(int i = 0; i < to.length; i++) { VIEw tv = v.findVIEwByID(to[i]);; tv.setonClickListener(clickListener); vIEws[i] = tv; } v.setTag(vIEws); } VIEw[] holders = (VIEw[]) v.getTag(); int len = holders.length; for(int i = 0 ; i < len; i++) { ((TextVIEw)holders[i]).setText(this.datas.get(position).get(from[i]).toString()); } return v; } } //测试点击的事件 protected VIEw.OnClickListener clickListener = new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { Toast.makeText(HListActivity.this,((TextVIEw)v).getText(),Toast.LENGTH_SHORT).show(); } }; } 

滑动vIEw代码

/** * 滑动代码 */ public class CHScrollVIEw extends horizontalscrollview { HListActivity activity; public CHScrollVIEw(Context context,AttributeSet attrs,int defStyle) { super(context,attrs,defStyle); activity = (HListActivity) context; } public CHScrollVIEw(Context context,AttributeSet attrs) { super(context,attrs); activity = (HListActivity) context; } public CHScrollVIEw(Context context) { super(context); activity = (HListActivity) context; } @OverrIDe public boolean ontouchEvent(MotionEvent ev) { //进行触摸赋值 activity.mtouchVIEw = this; return super.ontouchEvent(ev); } @OverrIDe protected voID onScrollChanged(int l,int oldt) { //当当前的CHSCrollVIEw被触摸时,滑动其它 if(activity.mtouchVIEw == this) { activity.onScrollChanged(l,t,oldl,oldt); }else{ super.onScrollChanged(l,oldt); } } } 

以上所述是小编给大家介绍的AndroID程序开发之ListVIEw实现横向滚动(带表头与固定列),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的Android程序开发之ListView实现横向滚动(带表头与固定列)全部内容,希望文章能够帮你解决Android程序开发之ListView实现横向滚动(带表头与固定列)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1141193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存