42 lines
1.4 KiB
Kotlin
42 lines
1.4 KiB
Kotlin
package com.xscm.moduleutil.widget
|
||
import android.content.Context
|
||
import android.util.AttributeSet
|
||
import android.view.MotionEvent
|
||
import androidx.viewpager.widget.ViewPager
|
||
/**
|
||
* 项目名称:羽声语音
|
||
* 时间:2025/12/3 9:30
|
||
* 用途:
|
||
*/
|
||
|
||
|
||
class CustomViewPager(context: Context, attrs: AttributeSet?) : ViewPager(context, attrs) {
|
||
|
||
private var initialX = 0f
|
||
private var initialY = 0f
|
||
|
||
override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
|
||
when (ev.action) {
|
||
MotionEvent.ACTION_DOWN -> {
|
||
// 记录初始触摸点
|
||
initialX = ev.x
|
||
initialY = ev.y
|
||
parent.requestDisallowInterceptTouchEvent(true) // 请求父容器不要拦截事件
|
||
}
|
||
MotionEvent.ACTION_MOVE -> {
|
||
val deltaX = Math.abs(ev.x - initialX)
|
||
val deltaY = Math.abs(ev.y - initialY)
|
||
|
||
// 如果水平滑动距离大于垂直滑动距离,才认为是水平滑动,ViewPager才拦截事件
|
||
if (deltaX > deltaY && deltaX > 30) { // 30是阈值,可以根据需要调整
|
||
return super.onInterceptTouchEvent(ev)
|
||
}
|
||
// 否则,不拦截,让子视图处理
|
||
parent.requestDisallowInterceptTouchEvent(true)
|
||
return false
|
||
}
|
||
}
|
||
return super.onInterceptTouchEvent(ev)
|
||
}
|
||
}
|