Media App播放器界面左右滑动切换上下曲

1.布局

xml 复制代码
        <View
            android:id="@+id/v_moveUp"
            android:layout_width="@dimen/dp_0"
            android:layout_height="@dimen/dp_0"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_TopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" >
        </View>

2.监听事件

kotlin 复制代码
    private lateinit var gestureHandler: BaseGestureHandler //左右滑动切歌

------------------------------------------------------------------------------------
        gestureHandler = object : BaseGestureHandler() {
            override fun onSwipeRight() {
                playNext()
            }

            override fun onSwipeLeft() {
                playPrevious()
            }
        }

        vMoveUp.isSoundEffectsEnabled = false
        vMoveUp.setOnTouchListener { v, event ->
            event?.let {
                if (it.pointerCount >= 2) {
                    return@setOnTouchListener false
                }
                gestureHandler.onTouchEvent(it) } ?: true
        }

        vMoveUp.setOnSingleClickListener {

        }

3.核心实现

kotlin 复制代码
abstract class BaseGestureHandler {
    val gestureDetector: GestureDetector

    init {
        gestureDetector = GestureDetector(object : GestureDetector.SimpleOnGestureListener() {
            private val swipeThreshold = 100
            private val swipeVelocityThreshold = 100

            override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
                val pointCount = e1.pointerCount
                val pointCount2 = e2.pointerCount
                if (pointCount > 1 || pointCount2 > 1) {
                    return false
                }

                val diffY = e2.y - e1.y
                val diffX = e2.x - e1.x
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > swipeThreshold && Math.abs(velocityX) > swipeVelocityThreshold) {
                        if (diffX > 0) {
                            onSwipeRight()
                        } else {
                            onSwipeLeft()
                        }
                        return true
                    }
                }
                return false
            }
        })
    }

    fun onTouchEvent(event: MotionEvent): Boolean {
        return gestureDetector.onTouchEvent(event)
    }

    abstract fun onSwipeRight()
    abstract fun onSwipeLeft()
}
相关推荐
莫魂魂20 分钟前
002_IDEA企业开发工具
java·ide·intellij-idea
〆、风神38 分钟前
EasyExcel 数据字典转换器实战:注解驱动设计
android·java·注解
Thanwind39 分钟前
关于JVM和OS中的指令重排以及JIT优化
java·jvm·jmm
点燃大海43 分钟前
MySQL表结构导出(Excel)
java·数据库·python·mysql·spring
stevenzqzq1 小时前
Android studio xml布局预览中 Automotive和Autotive Distant Display的区别
android·xml·android studio
倒霉蛋小马2 小时前
【Java集合】LinkedList源码深度分析
java·开发语言
QING6182 小时前
Kotlin commonPrefixWith用法及代码示例
android·kotlin·源码阅读
风象南2 小时前
SpringBoot中6种API版本控制策略
java·spring boot·后端
QING6182 小时前
Kotlin groupByTo用法及代码示例
android·kotlin·源码阅读
小周不摆烂4 小时前
Java Web从入门到精通:全面探索与实战(一)
java