@@ -75,7 +75,7 @@ public class GestureOverlayView extends FrameLayout {
|
|||||||
private int mInvalidateExtraBorder = 10;
|
private int mInvalidateExtraBorder = 10;
|
||||||
|
|
||||||
private int mGestureStrokeType = GESTURE_STROKE_TYPE_SINGLE;
|
private int mGestureStrokeType = GESTURE_STROKE_TYPE_SINGLE;
|
||||||
private float mGestureStrokeLengthThreshold = 30.0f;
|
private float mGestureStrokeLengthThreshold = 50.0f;
|
||||||
private float mGestureStrokeSquarenessTreshold = 0.275f;
|
private float mGestureStrokeSquarenessTreshold = 0.275f;
|
||||||
private float mGestureStrokeAngleThreshold = 40.0f;
|
private float mGestureStrokeAngleThreshold = 40.0f;
|
||||||
|
|
||||||
@@ -554,38 +554,38 @@ public class GestureOverlayView extends FrameLayout {
|
|||||||
|
|
||||||
mX = x;
|
mX = x;
|
||||||
mY = y;
|
mY = y;
|
||||||
}
|
|
||||||
|
|
||||||
mStrokeBuffer.add(new GesturePoint(x, y, event.getEventTime()));
|
mStrokeBuffer.add(new GesturePoint(x, y, event.getEventTime()));
|
||||||
|
|
||||||
if (mHandleGestureActions && !mIsGesturing) {
|
if (mHandleGestureActions && !mIsGesturing) {
|
||||||
mTotalLength += (float) Math.sqrt(dx * dx + dy * dy);
|
mTotalLength += (float) Math.sqrt(dx * dx + dy * dy);
|
||||||
|
|
||||||
if (mTotalLength > mGestureStrokeLengthThreshold) {
|
if (mTotalLength > mGestureStrokeLengthThreshold) {
|
||||||
final OrientedBoundingBox box =
|
final OrientedBoundingBox box =
|
||||||
GestureUtilities.computeOrientedBoundingBox(mStrokeBuffer);
|
GestureUtilities.computeOrientedBoundingBox(mStrokeBuffer);
|
||||||
|
|
||||||
float angle = Math.abs(box.orientation);
|
float angle = Math.abs(box.orientation);
|
||||||
if (angle > 90) {
|
if (angle > 90) {
|
||||||
angle = 180 - angle;
|
angle = 180 - angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (box.squareness > mGestureStrokeSquarenessTreshold ||
|
if (box.squareness > mGestureStrokeSquarenessTreshold ||
|
||||||
(mOrientation == ORIENTATION_VERTICAL ?
|
(mOrientation == ORIENTATION_VERTICAL ?
|
||||||
angle < mGestureStrokeAngleThreshold :
|
angle < mGestureStrokeAngleThreshold :
|
||||||
angle > mGestureStrokeAngleThreshold)) {
|
angle > mGestureStrokeAngleThreshold)) {
|
||||||
|
|
||||||
mIsGesturing = true;
|
mIsGesturing = true;
|
||||||
setCurrentColor(mCertainGestureColor);
|
setCurrentColor(mCertainGestureColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// pass the event to handlers
|
// pass the event to handlers
|
||||||
final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
|
final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
|
||||||
final int count = listeners.size();
|
final int count = listeners.size();
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
listeners.get(i).onGesture(this, event);
|
listeners.get(i).onGesture(this, event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return areaToRefresh;
|
return areaToRefresh;
|
||||||
@@ -594,35 +594,45 @@ public class GestureOverlayView extends FrameLayout {
|
|||||||
private void touchUp(MotionEvent event, boolean cancel) {
|
private void touchUp(MotionEvent event, boolean cancel) {
|
||||||
mIsListeningForGestures = false;
|
mIsListeningForGestures = false;
|
||||||
|
|
||||||
// add the stroke to the current gesture
|
// A gesture wasn't started or was cancelled
|
||||||
mCurrentGesture.addStroke(new GestureStroke(mStrokeBuffer));
|
if (mCurrentGesture != null) {
|
||||||
mStrokeBuffer.clear();
|
// add the stroke to the current gesture
|
||||||
|
mCurrentGesture.addStroke(new GestureStroke(mStrokeBuffer));
|
||||||
|
|
||||||
if (!cancel) {
|
if (!cancel) {
|
||||||
// pass the event to handlers
|
// pass the event to handlers
|
||||||
final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
|
final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
|
||||||
int count = listeners.size();
|
int count = listeners.size();
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
listeners.get(i).onGestureEnded(this, event);
|
listeners.get(i).onGestureEnded(this, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mHandleGestureActions) {
|
||||||
|
clear(mFadeEnabled, mIsGesturing);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cancelGesture(event);
|
||||||
|
|
||||||
if (mHandleGestureActions) {
|
|
||||||
clear(mFadeEnabled, mIsGesturing);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// pass the event to handlers
|
cancelGesture(event);
|
||||||
final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
|
|
||||||
final int count = listeners.size();
|
|
||||||
for (int i = 0; i < count; i++) {
|
|
||||||
listeners.get(i).onGestureCancelled(this, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
clear(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mStrokeBuffer.clear();
|
||||||
mIsGesturing = false;
|
mIsGesturing = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cancelGesture(MotionEvent event) {
|
||||||
|
// pass the event to handlers
|
||||||
|
final ArrayList<OnGestureListener> listeners = mOnGestureListeners;
|
||||||
|
final int count = listeners.size();
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
listeners.get(i).onGestureCancelled(this, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
clear(false);
|
||||||
|
}
|
||||||
|
|
||||||
private void fireOnGesturePerformed() {
|
private void fireOnGesturePerformed() {
|
||||||
final ArrayList<OnGesturePerformedListener> actionListeners =
|
final ArrayList<OnGesturePerformedListener> actionListeners =
|
||||||
mOnGesturePerformedListeners;
|
mOnGesturePerformedListeners;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import java.util.ArrayList;
|
|||||||
* A gesture stroke started on a touch down and ended on a touch up.
|
* A gesture stroke started on a touch down and ended on a touch up.
|
||||||
*/
|
*/
|
||||||
public class GestureStroke {
|
public class GestureStroke {
|
||||||
static final float TOUCH_TOLERANCE = 3;
|
static final float TOUCH_TOLERANCE = 8;
|
||||||
|
|
||||||
public final RectF boundingBox;
|
public final RectF boundingBox;
|
||||||
|
|
||||||
|
|||||||
@@ -177,7 +177,7 @@
|
|||||||
<item name="android:uncertainGestureColor">#48ffff00</item>
|
<item name="android:uncertainGestureColor">#48ffff00</item>
|
||||||
<item name="android:fadeOffset">420</item>
|
<item name="android:fadeOffset">420</item>
|
||||||
<item name="android:fadeDuration">150</item>
|
<item name="android:fadeDuration">150</item>
|
||||||
<item name="android:gestureStrokeLengthThreshold">30.0</item>
|
<item name="android:gestureStrokeLengthThreshold">50.0</item>
|
||||||
<item name="android:gestureStrokeSquarenessThreshold">0.275</item>
|
<item name="android:gestureStrokeSquarenessThreshold">0.275</item>
|
||||||
<item name="android:gestureStrokeAngleThreshold">40.0</item>
|
<item name="android:gestureStrokeAngleThreshold">40.0</item>
|
||||||
<item name="android:eventsInterceptionEnabled">true</item>
|
<item name="android:eventsInterceptionEnabled">true</item>
|
||||||
|
|||||||
Reference in New Issue
Block a user