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()
}
相关推荐
HerayChen6 小时前
HbuilderX 内存溢出报错
java·大数据·linux
程序员小白条6 小时前
0经验如何找实习?
java·开发语言·数据结构·数据库·链表
小马爱打代码6 小时前
Spring AI:搭建自定义 MCP Server:获取 QQ 信息
java·人工智能·spring
郭涤生6 小时前
QT 架构笔记
java·数据库·系统架构
daidaidaiyu6 小时前
基于LangGraph开发复杂智能体学习一则
java·ai
RainyJiang7 小时前
聊聊协程里的 Semaphore:别让协程挤爆门口
android·kotlin
小小8程序员7 小时前
STL 库(C++ Standard Template Library)全面介绍
java·开发语言·c++
a努力。7 小时前
Redis Java 开发系列#2 数据结构
java·数据结构·redis
科技动态8 小时前
BOE(京东方)“焕新2026”年终媒体智享会落地成都 三大显示技术品牌引领行业发展风潮
大数据·人工智能·媒体
a努力。8 小时前
腾讯Java面试被问:String、StringBuffer、StringBuilder区别
java·开发语言·后端·面试·职场和发展·架构