Skip to content

Instantly share code, notes, and snippets.

@Dmuasya
Created December 7, 2020 04:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dmuasya/5de62226fe19555488d283e957711937 to your computer and use it in GitHub Desktop.
Save Dmuasya/5de62226fe19555488d283e957711937 to your computer and use it in GitHub Desktop.
package dennis.pull.widget
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.widget.ScrollView
import dennis.pull.ScrollState
import dennis.pull.delegate.ScrollViewDelegate
import dennis.pull.listener.OnScrollChangedListener
class PullScrollView : ScrollView {
private var mScrollViewDelegate: ScrollViewDelegate? = null
constructor(context: Context) : super(context) {
init()
}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
init()
}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) :
super(context, attrs, defStyleAttr) {
init()
}
private fun init() {
mScrollViewDelegate = ScrollViewDelegate()
}
fun setPullRelativeLayoutState(state: ScrollState) {
mScrollViewDelegate!!.setPullRelativeLayoutState(state)
}
override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
super.onScrollChanged(l, t, oldl, oldt)
mScrollViewDelegate!!.onScrollChanged(this, l, t, oldl, oldt)
}
override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
mScrollViewDelegate!!.onInterceptTouch(ev)
if (mScrollViewDelegate!!.moveY - mScrollViewDelegate!!.downY < 0) {
return super.onInterceptTouchEvent(ev)
}
if (scrollY == 0) {
val state = mScrollViewDelegate!!.scrollState
if (state === ScrollState.SHOW || state === ScrollState.MOVE) {
return false
}
}
return super.onInterceptTouchEvent(ev)
}
override fun onTouchEvent(ev: MotionEvent): Boolean {
return if (mScrollViewDelegate!!.scrollState === ScrollState.HIDE) {
false
} else super.onTouchEvent(ev)
}
fun setOnScrollChangedListener(listener: OnScrollChangedListener) {
mScrollViewDelegate!!.setOnScrollChangedListener(listener)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment