From 32c78d528a813689475d97f81588257a195e9481 Mon Sep 17 00:00:00 2001 From: kevintan Date: Mon, 16 Mar 2015 12:45:41 +0800 Subject: [PATCH] dont intercept when floating action button is clicked, fixes fab touch issue for larger screens --- .../samples/SlidingUpBaseActivity.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/observablescrollview-samples/src/main/java/com/github/ksoichiro/android/observablescrollview/samples/SlidingUpBaseActivity.java b/observablescrollview-samples/src/main/java/com/github/ksoichiro/android/observablescrollview/samples/SlidingUpBaseActivity.java index 19630427..9656fdcf 100644 --- a/observablescrollview-samples/src/main/java/com/github/ksoichiro/android/observablescrollview/samples/SlidingUpBaseActivity.java +++ b/observablescrollview-samples/src/main/java/com/github/ksoichiro/android/observablescrollview/samples/SlidingUpBaseActivity.java @@ -24,6 +24,7 @@ import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; +import android.widget.Toast; import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; import com.github.ksoichiro.android.observablescrollview.ScrollState; @@ -79,6 +80,12 @@ public abstract class SlidingUpBaseActivity extends BaseAc private boolean mHeaderColorChangedToBottom; private boolean mHeaderIsAtBottom; private boolean mHeaderIsNotAtBottom; + private View.OnClickListener fabClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(SlidingUpBaseActivity.this, "floating action button clicked", Toast.LENGTH_SHORT).show(); + } + }; @Override protected void onCreate(Bundle savedInstanceState) { @@ -119,6 +126,7 @@ public void onClick(View v) { mScrollable = createScrollable(); mFab = findViewById(R.id.fab); + mFab.setOnClickListener(fabClickListener); mFabMargin = getResources().getDimensionPixelSize(R.dimen.margin_standard); mInterceptionLayout = (TouchInterceptionFrameLayout) findViewById(R.id.scroll_wrapper); @@ -179,8 +187,17 @@ public void onUpOrCancelMotionEvent(ScrollState scrollState) { @Override public boolean shouldInterceptTouchEvent(MotionEvent ev, boolean moving, float diffX, float diffY) { final int minInterceptionLayoutY = -mIntersectionHeight; - return minInterceptionLayoutY < (int) ViewHelper.getY(mInterceptionLayout) - || (moving && mScrollable.getCurrentScrollY() - diffY < 0); + + //slight fix for untappable floating action button for larger screens + Rect fabRect = new Rect(); + mFab.getHitRect(fabRect); + //if the user's touch is within the floating action button's touch area, dont intercept + if (fabRect.contains((int)ev.getX(), (int)ev.getY())) { + return false; + }else{ + return minInterceptionLayoutY < (int) ViewHelper.getY(mInterceptionLayout) + || (moving && mScrollable.getCurrentScrollY() - diffY < 0); + } } @Override