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()
}
相关推荐
en-route21 分钟前
如何在 Spring Boot 中指定不同的配置文件?
java·spring boot·后端
百锦再29 分钟前
在 CentOS 系统上实现定时执行 Python 邮件发送任务
java·linux·开发语言·人工智能·python·centos·pygame
Luna-player42 分钟前
某个工程 pom.xml
xml
echoyu.42 分钟前
消息队列-kafka完结
java·分布式·kafka
七夜zippoe1 小时前
分布式事务性能优化:从故障现场到方案落地的实战手记(二)
java·分布式·性能优化
栀椩1 小时前
springboot配置请求日志
java·spring boot·后端
番薯大佬1 小时前
Python学习-day8 元组tuple
java·python·学习
何似在人间5751 小时前
Go语言快速入门教程(JAVA转go)——1 概述
java·开发语言·golang
疯子@1231 小时前
nacos1.3.2 ARM 版容器镜像制作
java·linux·docker·容器
Swift社区2 小时前
如何解决 Spring Bean 循环依赖
java·后端·spring