android实现两个listview的同步滚动

来源:互联网 发布:淘宝联盟app怎么返利 编辑:程序博客网 时间:2024/06/05 06:06
在开发的过程中看到项目有实现两个listview同步滚动的效果,所以就希望跟大家分享一下!!

不用说大家可能也想到在listview的onScrollListener中做一些操作,

  

现在具体的细节如下:

view source
print?
01public void setListViewOnTouchAndScrollListener(finalListView listView1,finalListView listView2){
02         
03           
04         //设置listview2列表的scroll监听,用于滑动过程中左右不同步时校正
05         listView2.setOnScrollListener(newOnScrollListener() {
06    
07    @Override
08    publicvoid onScrollStateChanged(AbsListView view,int scrollState) {
09     //如果停止滑动
10     if(scrollState ==0 || scrollState ==1){
11      //获得第一个子view
12      View subView = view.getChildAt(0);
13      
14      if(subView !=null){
15       finalint top = subView.getTop();
16       finalint top1 = listView1.getChildAt(0).getTop();
17       finalint position = view.getFirstVisiblePosition();
18       
19       //如果两个首个显示的子view高度不等
20       if(top != top1){
21        listView1.setSelectionFromTop(position, top);
22       }
23      }
24     }
25     
26    }
27    
28    publicvoid onScroll(AbsListView view,final intfirstVisibleItem,
29      intvisibleItemCount, inttotalItemCount) {
30     View subView = view.getChildAt(0);
31     if(subView !=null){
32      finalint top = subView.getTop();
33 
34//      //如果两个首个显示的子view高度不等
35      inttop1 = listView1.getChildAt(0).getTop();
36      if(!(top1 -7 < top &&top < top1 +7)){
37       listView1.setSelectionFromTop(firstVisibleItem, top);
38       listView2.setSelectionFromTop(firstVisibleItem, top);
39      }
40     
41     }
42    }
43   });
44        
45       //设置listview1列表的scroll监听,用于滑动过程中左右不同步时校正
46         listView1.setOnScrollListener(newOnScrollListener() {
47    
48    @Override
49    publicvoid onScrollStateChanged(AbsListView view,int scrollState) {
50    if(scrollState ==0 || scrollState ==1){
51      //获得第一个子view
52      View subView = view.getChildAt(0);
53      
54      if(subView !=null){
55       finalint top = subView.getTop();
56       finalint top1 = listView2.getChildAt(0).getTop();
57       finalint position = view.getFirstVisiblePosition();
58       
59       //如果两个首个显示的子view高度不等
60       if(top != top1){
61        listView1.setSelectionFromTop(position, top);
62        listView2.setSelectionFromTop(position, top);
63       }
64      }
65     }
66    }
67    
68    @Override
69    publicvoid onScroll(AbsListView view,final intfirstVisibleItem,
70      intvisibleItemCount, inttotalItemCount) {
71     View subView = view.getChildAt(0);
72     if(subView !=null){
73      finalint top = subView.getTop();
74      listView1.setSelectionFromTop(firstVisibleItem, top);
75     listView2.setSelectionFromTop(firstVisibleItem, top);
76     
77     }
78    }
79   });
80}
0 0
原创粉丝点击