Guest User

Untitled

a guest
Aug 21st, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1. import android.annotation.SuppressLint
  2. import android.content.Context
  3. import android.support.annotation.AttrRes
  4. import android.support.design.widget.CoordinatorLayout
  5. import android.support.v4.view.NestedScrollingChild2
  6. import android.support.v4.view.NestedScrollingChildHelper
  7. import android.util.AttributeSet
  8. import android.view.View
  9. import com.douglas.startpage.R
  10.  
  11. class NestedCoordinatorLayout @JvmOverloads constructor(
  12. context: Context,
  13. attrs: AttributeSet? = null,
  14. @AttrRes
  15. @SuppressLint("PrivateResource")
  16. defStyleAttr: Int = R.attr.coordinatorLayoutStyle
  17. ) : CoordinatorLayout(context, attrs, defStyleAttr), NestedScrollingChild2 {
  18.  
  19. private val helper = NestedScrollingChildHelper(this)
  20.  
  21. init {
  22. isNestedScrollingEnabled = true
  23. }
  24.  
  25. override fun isNestedScrollingEnabled(): Boolean = helper.isNestedScrollingEnabled
  26.  
  27. override fun setNestedScrollingEnabled(enabled: Boolean) {
  28. helper.isNestedScrollingEnabled = enabled
  29. }
  30.  
  31. override fun hasNestedScrollingParent(type: Int): Boolean = helper.hasNestedScrollingParent(type)
  32.  
  33. override fun hasNestedScrollingParent(): Boolean = helper.hasNestedScrollingParent()
  34.  
  35. override fun onStartNestedScroll(child: View, target: View, axes: Int, type: Int): Boolean {
  36. val superResult = super.onStartNestedScroll(child, target, axes, type)
  37. return startNestedScroll(axes, type) || superResult
  38. }
  39.  
  40. override fun onStartNestedScroll(child: View, target: View, axes: Int): Boolean {
  41. val superResult = super.onStartNestedScroll(child, target, axes)
  42. return startNestedScroll(axes) || superResult
  43. }
  44.  
  45. override fun onNestedPreScroll(target: View, dx: Int, dy: Int, consumed: IntArray, type: Int) {
  46. val superConsumed = intArrayOf(0, 0)
  47. super.onNestedPreScroll(target, dx, dy, superConsumed, type)
  48. val thisConsumed = intArrayOf(0, 0)
  49. dispatchNestedPreScroll(dx, dy, thisConsumed, null)
  50. consumed[0] = superConsumed[0] + thisConsumed[0]
  51. consumed[1] = superConsumed[1] + thisConsumed[1]
  52. }
  53.  
  54. override fun onNestedPreScroll(target: View, dx: Int, dy: Int, consumed: IntArray) {
  55. val superConsumed = intArrayOf(0, 0)
  56. super.onNestedPreScroll(target, dx, dy, superConsumed)
  57. val thisConsumed = intArrayOf(0, 0)
  58. dispatchNestedPreScroll(dx, dy, thisConsumed, null)
  59. consumed[0] = superConsumed[0] + thisConsumed[0]
  60. consumed[1] = superConsumed[1] + thisConsumed[1]
  61. }
  62.  
  63. override fun onNestedScroll(target: View, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int,
  64. dyUnconsumed: Int, type: Int
  65. ) {
  66. super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type)
  67. dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, null, type)
  68. }
  69.  
  70. override fun onNestedScroll(target: View, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int) {
  71. super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed)
  72. dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, null)
  73. }
  74.  
  75. override fun onStopNestedScroll(target: View, type: Int) {
  76. super.onStopNestedScroll(target, type)
  77. stopNestedScroll(type)
  78. }
  79.  
  80. override fun onStopNestedScroll(target: View) {
  81. super.onStopNestedScroll(target)
  82. stopNestedScroll()
  83. }
  84.  
  85. override fun onNestedPreFling(target: View, velocityX: Float, velocityY: Float): Boolean {
  86. val superResult = super.onNestedPreFling(target, velocityX, velocityY)
  87. return dispatchNestedPreFling(velocityX, velocityY) || superResult
  88. }
  89.  
  90. override fun onNestedFling(target: View, velocityX: Float, velocityY: Float, consumed: Boolean): Boolean {
  91. val superResult = super.onNestedFling(target, velocityX, velocityY, consumed)
  92. return dispatchNestedFling(velocityX, velocityY, consumed) || superResult
  93. }
  94.  
  95. override fun startNestedScroll(axes: Int, type: Int): Boolean = helper.startNestedScroll(axes, type)
  96.  
  97. override fun startNestedScroll(axes: Int): Boolean = helper.startNestedScroll(axes)
  98.  
  99. override fun stopNestedScroll(type: Int) {
  100. helper.stopNestedScroll(type)
  101. }
  102.  
  103. override fun stopNestedScroll() {
  104. helper.stopNestedScroll()
  105. }
  106.  
  107. override fun dispatchNestedScroll(dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int,
  108. offsetInWindow: IntArray?, type: Int
  109. ): Boolean = helper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow, type)
  110.  
  111. override fun dispatchNestedScroll(dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int,
  112. dyUnconsumed: Int, offsetInWindow: IntArray?
  113. ): Boolean = helper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow)
  114.  
  115. override fun dispatchNestedPreScroll(dx: Int, dy: Int, consumed: IntArray?,
  116. offsetInWindow: IntArray?, type: Int
  117. ): Boolean = helper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow, type)
  118.  
  119. override fun dispatchNestedPreScroll(dx: Int, dy: Int, consumed: IntArray?, offsetInWindow: IntArray?): Boolean =
  120. helper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow)
  121.  
  122. override fun dispatchNestedPreFling(velocityX: Float, velocityY: Float): Boolean =
  123. helper.dispatchNestedPreFling(velocityX, velocityY)
  124.  
  125. override fun dispatchNestedFling(velocityX: Float, velocityY: Float, consumed: Boolean): Boolean =
  126. helper.dispatchNestedFling(velocityX, velocityY, consumed)
  127.  
  128. }
Add Comment
Please, Sign In to add comment