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()
}
相关推荐
都叫我大帅哥6 小时前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七7 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
红尘伴蝶舞8 小时前
Android 17 局域网调试与 ACCESS_LOCAL_NETWORK 权限隔离实践
kotlin·测试·设计
ThsPool8 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾9 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
青山木10 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_10 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
摇滚侠10 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 管理 Spring Boot 应用 阅读笔记
java·spring boot·笔记
XWalnut10 小时前
SpringBoot快速入门
java·spring boot·后端
前端 贾公子10 小时前
第06章:结构化输出 (上)
java·服务器·前端