Skip to content

Most visited

Recently visited

navigation
BasicGestureDetect / src / com.example.android.basicgesturedetect /

GestureListener.java

1
/*
2
 * Copyright 2013 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.basicgesturedetect;
18
 
19
import android.annotation.TargetApi;
20
import android.os.Build;
21
import android.view.GestureDetector;
22
import android.view.MotionEvent;
23
 
24
import com.example.android.common.logger.Log;
25
 
26
public class GestureListener extends GestureDetector.SimpleOnGestureListener {
27
 
28
    public static final String TAG = "GestureListener";
29
 
31
    @Override
32
    public boolean onSingleTapUp(MotionEvent e) {
33
        // Up motion completing a single tap occurred.
34
        Log.i(TAG, "Single Tap Up" + getTouchType(e));
35
        return false;
36
    }
37
 
38
    @Override
39
    public void onLongPress(MotionEvent e) {
40
        // Touch has been long enough to indicate a long press.
41
        // Does not indicate motion is complete yet (no up event necessarily)
42
        Log.i(TAG, "Long Press" + getTouchType(e));
43
    }
44
 
45
    @Override
46
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
47
    float distanceY) {
48
        // User attempted to scroll
49
        Log.i(TAG, "Scroll" + getTouchType(e1));
50
        return false;
51
    }
52
 
53
    @Override
54
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
55
    float velocityY) {
56
        // Fling event occurred.  Notification of this one happens after an "up" event.
57
        Log.i(TAG, "Fling" + getTouchType(e1));
58
        return false;
59
    }
60
 
61
    @Override
62
    public void onShowPress(MotionEvent e) {
63
        // User performed a down event, and hasn't moved yet.
64
        Log.i(TAG, "Show Press" + getTouchType(e));
65
    }
66
 
67
    @Override
68
    public boolean onDown(MotionEvent e) {
69
        // "Down" event - User touched the screen.
70
        Log.i(TAG, "Down" + getTouchType(e));
71
        return false;
72
    }
73
 
74
    @Override
75
    public boolean onDoubleTap(MotionEvent e) {
76
        // User tapped the screen twice.
77
        Log.i(TAG, "Double tap" + getTouchType(e));
78
        return false;
79
    }
80
 
81
    @Override
82
    public boolean onDoubleTapEvent(MotionEvent e) {
83
        // Since double-tap is actually several events which are considered one aggregate
84
        // gesture, there's a separate callback for an individual event within the doubletap
85
        // occurring.  This occurs for down, up, and move.
86
        Log.i(TAG, "Event within double tap" + getTouchType(e));
87
        return false;
88
    }
89
 
90
    @Override
91
    public boolean onSingleTapConfirmed(MotionEvent e) {
92
        // A confirmed single-tap event has occurred.  Only called when the detector has
93
        // determined that the first tap stands alone, and is not part of a double tap.
94
        Log.i(TAG, "Single tap confirmed" + getTouchType(e));
95
        return false;
96
    }
98
 
99
 
100
    /**
101
     * Returns a human-readable string describing the type of touch that triggered a MotionEvent.
102
     */
103
 
104
    private static String getTouchType(MotionEvent e){
105
 
106
        String touchTypeDescription = " ";
107
        int touchType = e.getToolType(0);
108
 
109
        switch (touchType) {
110
            case MotionEvent.TOOL_TYPE_FINGER:
111
                touchTypeDescription += "(finger)";
112
                break;
113
            case MotionEvent.TOOL_TYPE_STYLUS:
114
                touchTypeDescription += "(stylus, ";
115
                //Get some additional information about the stylus touch
116
                float stylusPressure = e.getPressure();
117
                touchTypeDescription += "pressure: " + stylusPressure;
118
 
119
                if(Build.VERSION.SDK_INT >= 21) {
120
                    touchTypeDescription += ", buttons pressed: " + getButtonsPressed(e);
121
                }
122
 
123
                touchTypeDescription += ")";
124
                break;
125
            case MotionEvent.TOOL_TYPE_ERASER:
126
                touchTypeDescription += "(eraser)";
127
                break;
128
            case MotionEvent.TOOL_TYPE_MOUSE:
129
                touchTypeDescription += "(mouse)";
130
                break;
131
            default:
132
                touchTypeDescription += "(unknown tool)";
133
                break;
134
        }
135
 
136
        return touchTypeDescription;
137
    }
138
 
139
    /**
140
     * Returns a human-readable string listing all the stylus buttons that were pressed when the
141
     * input MotionEvent occurred.
142
     */
143
    @TargetApi(21)
144
    private static String getButtonsPressed(MotionEvent e){
145
        String buttons = "";
146
 
147
        if(e.isButtonPressed(MotionEvent.BUTTON_PRIMARY)){
148
            buttons += " primary";
149
        }
150
 
151
        if(e.isButtonPressed(MotionEvent.BUTTON_SECONDARY)){
152
            buttons += " secondary";
153
        }
154
 
155
        if(e.isButtonPressed(MotionEvent.BUTTON_TERTIARY)){
156
            buttons += " tertiary";
157
        }
158
 
159
        if(e.isButtonPressed(MotionEvent.BUTTON_BACK)){
160
            buttons += " back";
161
        }
162
 
163
        if(e.isButtonPressed(MotionEvent.BUTTON_FORWARD)){
164
            buttons += " forward";
165
        }
166
 
167
        if (buttons.equals("")){
168
            buttons = "none";
169
        }
170
 
171
        return buttons;
172
    }
173
 
174
}
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.