diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-09-15 21:33:10 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-09-15 21:33:10 +0000 |
commit | 9784572c47b414d1a707e5e29e48165e24b1d742 (patch) | |
tree | f3d8209a63da42b62fe84908c846bd92507e07bf | |
parent | 3f9d6278e3c772cd1b63ff9dcd5ed2b8ec782ce2 (diff) | |
parent | 1cc48e1d0c0bd30bc59cc37c4d49ee78b01424f0 (diff) | |
download | android_packages_apps_Trebuchet-9784572c47b414d1a707e5e29e48165e24b1d742.tar.gz android_packages_apps_Trebuchet-9784572c47b414d1a707e5e29e48165e24b1d742.tar.bz2 android_packages_apps_Trebuchet-9784572c47b414d1a707e5e29e48165e24b1d742.zip |
Adding support for extending the touch target in the touchDelegate
am: 1cc48e1d0c
Change-Id: I29ce4b52a2b687f73b2db4ddb633210e905aad69
-rw-r--r-- | src/com/android/launcher3/util/TransformingTouchDelegate.java | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/com/android/launcher3/util/TransformingTouchDelegate.java b/src/com/android/launcher3/util/TransformingTouchDelegate.java index da1de5e77..3197ba946 100644 --- a/src/com/android/launcher3/util/TransformingTouchDelegate.java +++ b/src/com/android/launcher3/util/TransformingTouchDelegate.java @@ -33,6 +33,10 @@ public class TransformingTouchDelegate extends TouchDelegate { private final RectF mBounds; + private final RectF mTouchCheckBounds; + private float mTouchExtension; + private boolean mWasTouchOutsideBounds; + private View mDelegateView; private boolean mDelegateTargeted; @@ -41,10 +45,22 @@ public class TransformingTouchDelegate extends TouchDelegate { mDelegateView = delegateView; mBounds = new RectF(); + mTouchCheckBounds = new RectF(); } public void setBounds(int left, int top, int right, int bottom) { mBounds.set(left, top, right, bottom); + updateTouchBounds(); + } + + public void extendTouchBounds(float extension) { + mTouchExtension = extension; + updateTouchBounds(); + } + + private void updateTouchBounds() { + mTouchCheckBounds.set(mBounds); + mTouchCheckBounds.inset(-mTouchExtension, -mTouchExtension); } public void setDelegateView(View view) { @@ -62,8 +78,9 @@ public class TransformingTouchDelegate extends TouchDelegate { boolean sendToDelegate = false; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: - mDelegateTargeted = mBounds.contains(event.getX(), event.getY()); + mDelegateTargeted = mTouchCheckBounds.contains(event.getX(), event.getY()); if (mDelegateTargeted) { + mWasTouchOutsideBounds = !mBounds.contains(event.getX(), event.getY()); sendToDelegate = true; } break; @@ -78,9 +95,15 @@ public class TransformingTouchDelegate extends TouchDelegate { } boolean handled = false; if (sendToDelegate) { - event.offsetLocation(-mBounds.left, -mBounds.top); + float x = event.getX(); + float y = event.getY(); + if (mWasTouchOutsideBounds) { + event.setLocation(mBounds.centerX(), mBounds.centerY()); + } else { + event.offsetLocation(-mBounds.left, -mBounds.top); + } handled = mDelegateView.dispatchTouchEvent(event); - event.offsetLocation(mBounds.left, mBounds.top); + event.setLocation(x, y); } return handled; } |