Created
May 1, 2017 16:26
-
-
Save wakim/2f4d87a6cc6d149da11c0e8df3b4e9fa to your computer and use it in GitHub Desktop.
Improved version of SwipeRefresh that don't trigger refresh while setEnabled is called during scroll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context | |
import android.support.v4.widget.SwipeRefreshLayout | |
import android.util.AttributeSet | |
import android.view.MotionEvent | |
import android.view.View | |
/*** | |
* Set the enabled property only when an touch up or touch cancel is detected | |
*/ | |
class CustomSwipeRefreshLayout : SwipeRefreshLayout { | |
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) | |
constructor(context: Context) : super(context) | |
var duringTouch = false | |
var pendingEnabled = true | |
val parentScrollConsumed = IntArray(2) | |
override fun setEnabled(enabled: Boolean) { | |
pendingEnabled = enabled | |
if (duringTouch && enabled) { | |
return | |
} | |
super.setEnabled(enabled) | |
} | |
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { | |
val action = ev?.action ?: super.onInterceptTouchEvent(ev) | |
if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE) { | |
duringTouch = true | |
} else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { | |
duringTouch = false | |
isEnabled = pendingEnabled | |
} | |
return super.onInterceptTouchEvent(ev) | |
} | |
/** | |
* Override onNestedScroll to ignore spinner offset when disabled | |
*/ | |
override fun onNestedScroll(target: View?, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int) { | |
if (isEnabled) { | |
super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed) | |
} else { | |
dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, parentScrollConsumed) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment