Nextrek
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
123
124
125
126
127
128
129
130
131
132
133
|
package nextrek.widgets;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Display;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ListView;
public class VList extends ListView {
private final static float MIN_ZOOM = 1.0f;
private final static float MAX_ZOOM = 4.0f;
private final static int ZOOM_REFRESH_DELAY = 50;
private final static int SCROLLBAR_PADDING = 15;
private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.0f;
public VList(Context context) {
super(context);
initView();
}
public VList(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
private void initView() {
setScrollBarStyle(SCROLLBARS_INSIDE_OVERLAY);
setPadding(0, 0, 0, 0);
setClickable(false);
setFocusable(false);
setFocusableInTouchMode(false);
setItemsCanFocus(false);
setChoiceMode(CHOICE_MODE_NONE);
setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);
setDrawingCacheEnabled(false);
destroyDrawingCache();
//setDivider(null);
//setHorizontalScrollBarEnabled(true);
setDividerHeight(50);
setOnScrollListener(listViewScrollListener);
mScaleDetector = new ScaleGestureDetector(getContext(), new ScaleListener());
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mScaleDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
public static int screenWidth = 1024;
public static int baseScreenWidth = 1024;
long lastNotification = 0;
public void resetGridScale(Display display) {
baseScreenWidth = screenWidth = (int) ((display.getWidth()-SCROLLBAR_PADDING) * mScaleFactor);
((BaseAdapter) getAdapter()).notifyDataSetChanged();
}
public void updateGridScale() {
screenWidth = (int) (baseScreenWidth * mScaleFactor);
long timestamp = System.currentTimeMillis();
if (timestamp > lastNotification) {
//System.out.println("width: " + screenWidth + " scale: " + mScaleFactor);
//((BaseAdapter) getAdapter()).notifyDataSetChanged();
invalidateViews();
lastNotification = System.currentTimeMillis() + ZOOM_REFRESH_DELAY;
}
}
OnScrollListener listViewScrollListener = new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
mFirstVisibleItem = firstVisibleItem;
}
};
int mFirstVisibleItem = 0;
public int getFirstVisibleItem() {
return mFirstVisibleItem;
}
public void setFirstVisibleItem(int current_tile) {
mFirstVisibleItem = current_tile;
setSelection(mFirstVisibleItem);
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
// Don't let the object get too small or too large.
mScaleFactor = Math.max(MIN_ZOOM, Math.min(mScaleFactor, MAX_ZOOM));
updateGridScale();
return true;
}
}
}
|
Revision |
Author |
Commited |
Message |
4
|
FMMortaroli
|
Fri 19 Apr, 2013 16:54:38 +0000 |
|