CustomSwipeToRefresh

This commit is contained in:
rimthekid 2022-03-18 06:03:54 -07:00
parent 4471e22977
commit 9726d55ec4
2 changed files with 60 additions and 2 deletions

View File

@ -0,0 +1,58 @@
package com.github.libretube
import android.content.Context
import android.util.AttributeSet
import android.view.KeyEvent.ACTION_DOWN
import android.view.KeyEvent.ACTION_UP
import android.view.MotionEvent
import android.view.MotionEvent.ACTION_CANCEL
import android.view.MotionEvent.ACTION_MOVE
import android.view.View
import android.view.ViewConfiguration
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import kotlin.math.abs
class CustomSwipeToRefresh
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null
) : SwipeRefreshLayout(context, attrs) {
private val touchSlop: Int = ViewConfiguration.get(context).scaledTouchSlop
private var startX = 0f
private var startY = 0f
private var forbidSwipe = false
private var isStartScrolledByY = false
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
ACTION_DOWN -> {
startX = event.x
startY = event.y
}
ACTION_MOVE -> {
val isScrolledByX = abs(event.x - startX) > touchSlop
val isScrolledByY = abs(event.y - startY) > touchSlop
if (!forbidSwipe && isScrolledByY) {
isStartScrolledByY = true
}
if ((isScrolledByX || forbidSwipe) && !isStartScrolledByY) {
forbidSwipe = true
return false
}
}
ACTION_CANCEL, ACTION_UP -> {
forbidSwipe = false
isStartScrolledByY = false
}
}
return super.onInterceptTouchEvent(event)
}
override fun onNestedScroll(target: View, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int) {
if (forbidSwipe) return
super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed)
}
}

View File

@ -40,7 +40,7 @@
android:textStyle="bold" />
</RelativeLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
<com.github.libretube.CustomSwipeToRefresh
android:id="@+id/sub_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -80,5 +80,5 @@
</RelativeLayout>
</LinearLayout>
</ScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</com.github.libretube.CustomSwipeToRefresh>
</RelativeLayout>