Androidは2つのlistviewの同期スクロールを実現
7529 ワード
开発の过程でプロジェクトが2つのlistviewを同时にスクロールする効果があることを见て、だからみんなと分かち合いたいです!!
言うまでもなくlistviewのonScrolListenerでいくつかの操作をしたいと思っているかもしれませんが、
詳細は次のとおりです.
view source
print ?
言うまでもなくlistviewのonScrolListenerでいくつかの操作をしたいと思っているかもしれませんが、
詳細は次のとおりです.
view source
print ?
01
public
void
setListViewOnTouchAndScrollListener(
final
ListView listView1,
final
ListView listView2){
02
03
04
// listview2 scroll ,
05
listView2.setOnScrollListener(
new
OnScrollListener() {
06
07
@Override
08
public
void
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
final
int
top = subView.getTop();
16
final
int
top1 = listView1.getChildAt(
0
).getTop();
17
final
int
position = view.getFirstVisiblePosition();
18
19
// view
20
if
(top != top1){
21
listView1.setSelectionFromTop(position, top);
22
}
23
}
24
}
25
26
}
27
28
public
void
onScroll(AbsListView view,
final
int
firstVisibleItem,
29
int
visibleItemCount,
int
totalItemCount) {
30
View subView = view.getChildAt(
0
);
31
if
(subView !=
null
){
32
final
int
top = subView.getTop();
33
34
// // view
35
int
top1 = 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(
new
OnScrollListener() {
47
48
@Override
49
public
void
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
final
int
top = subView.getTop();
56
final
int
top1 = listView2.getChildAt(
0
).getTop();
57
final
int
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
public
void
onScroll(AbsListView view,
final
int
firstVisibleItem,
70
int
visibleItemCount,
int
totalItemCount) {
71
View subView = view.getChildAt(
0
);
72
if
(subView !=
null
){
73
final
int
top = subView.getTop();
74
listView1.setSelectionFromTop(firstVisibleItem, top);
75
listView2.setSelectionFromTop(firstVisibleItem, top);
76
77
}
78
}
79
});
80
}