-
Notifications
You must be signed in to change notification settings - Fork 129
/
ItemsActivity.java
122 lines (92 loc) · 3.58 KB
/
ItemsActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.vladimir.pinterestlistview;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import com.vladimir.pinterestlistview.adapters.ItemsAdapter;
public class ItemsActivity extends Activity {
private final String TAG = "FeedActivity";
private ListView listViewLeft;
private ListView listViewRight;
private ItemsAdapter leftAdapter;
private ItemsAdapter rightAdapter;
int[] leftViewsHeights;
int[] rightViewsHeights;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.items_list);
listViewLeft = (ListView) findViewById(R.id.list_view_left);
listViewRight = (ListView) findViewById(R.id.list_view_right);
loadItems();
listViewLeft.setOnTouchListener(touchListener);
listViewRight.setOnTouchListener(touchListener);
listViewLeft.setOnScrollListener(scrollListener);
listViewRight.setOnScrollListener(scrollListener);
}
OnTouchListener touchListener = new OnTouchListener() {
boolean dispatched = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.equals(listViewLeft) && !dispatched) {
dispatched = true;
listViewRight.dispatchTouchEvent(event);
} else if (v.equals(listViewRight) && !dispatched) {
dispatched = true;
listViewLeft.dispatchTouchEvent(event);
}
dispatched = false;
return false;
}
};
OnScrollListener scrollListener = new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView v, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (view.getChildAt(0) != null) {
if (view.equals(listViewLeft) ){
leftViewsHeights[view.getFirstVisiblePosition()] = view.getChildAt(0).getHeight();
int h = 0;
for (int i = 0; i < listViewRight.getFirstVisiblePosition(); i++) {
h += rightViewsHeights[i];
}
int hi = 0;
for (int i = 0; i < listViewLeft.getFirstVisiblePosition(); i++) {
hi += leftViewsHeights[i];
}
int top = h - hi + view.getChildAt(0).getTop();
listViewRight.setSelectionFromTop(listViewRight.getFirstVisiblePosition(), top);
} else if (view.equals(listViewRight)) {
rightViewsHeights[view.getFirstVisiblePosition()] = view.getChildAt(0).getHeight();
int h = 0;
for (int i = 0; i < listViewLeft.getFirstVisiblePosition(); i++) {
h += leftViewsHeights[i];
}
int hi = 0;
for (int i = 0; i < listViewRight.getFirstVisiblePosition(); i++) {
hi += rightViewsHeights[i];
}
int top = h - hi + view.getChildAt(0).getTop();
listViewLeft.setSelectionFromTop(listViewLeft.getFirstVisiblePosition(), top);
}
}
}
};
private void loadItems(){
Integer[] leftItems = new Integer[]{R.drawable.ic_1, R.drawable.ic_2, R.drawable.ic_3, R.drawable.ic_4, R.drawable.ic_5};
Integer[] rightItems = new Integer[]{R.drawable.ic_6, R.drawable.ic_7, R.drawable.ic_8, R.drawable.ic_9, R.drawable.ic_10};
leftAdapter = new ItemsAdapter(this, R.layout.item, leftItems);
rightAdapter = new ItemsAdapter(this, R.layout.item, rightItems);
listViewLeft.setAdapter(leftAdapter);
listViewRight.setAdapter(rightAdapter);
leftViewsHeights = new int[leftItems.length];
rightViewsHeights = new int[rightItems.length];
}
}