Subversion Repository Public Repository

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;
    }
}
}

Commits for Nextrek/Android/LibrerieNextrek/src/nextrek/widgets/VList.java

Diff revisions: vs.
Revision Author Commited Message
4 FMMortaroli picture FMMortaroli Fri 19 Apr, 2013 16:54:38 +0000