gpt4 book ai didi

android - 如何将点击监听器添加到轮播项目

转载 作者:行者123 更新时间:2023-12-05 04:29:43 26 4
gpt4 key购买 nike

我已经按照本指南使用 MotionLayout 创建了 Carousel:https://developer.android.com/training/constraint-layout/motionlayout/carousel

本指南中的所有内容都已正常运行 - 我可以在项目轮播中滑动。

但是,我在将 onClickListener 添加到轮播项目时遇到了问题。我试过像这样在适配器中设置 onClickListener:

carousel.setAdapter(object : Carousel.Adapter {
override fun populate(view: View?, index: Int) {
view.setOnClickListener {
// do something
}
}
})

但是,这会使轮播对滑动没有反应。当我尝试滑动轮播时,它会执行我的 onClick 函数,但不会执行我的 onSwipe 转换。

我的问题是,为 Carousel 项目设置 onClick 函数的正确方法是什么?

在寻找答案时,我看到了一些引用了 Carousel.setOnItemClickListener() 的帖子。这正是我需要的,但它似乎已被弃用。

我还看到帖子说要覆盖 onTouchListener 并在 ACTION_UP 事件上运行您的 onClick 代码。我已经尝试了此代码 fragment 的几个变体,但无法使其正常工作:

carousel.setAdapter(object : Carousel.Adapter {
override fun populate(view: View?, index: Int) {
view.setOnTouchListener { view, motionEvent ->
if(motionEvent.action == MotionEvent.ACTION_UP) {
// do something
}
view.performClick()
}
}
})

非常感谢任何帮助!

最佳答案

没有更好的解决方案

您可以像这样覆盖父 MotionLayout 类。拦截滑动事件

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.constraintlayout.motion.widget.MotionLayout
import kotlin.math.abs

/**
* @author : litao
* @email : onresume@live.com
* @date : 2022/5/31 5:31 下午
*/
class TestMotionLayout constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
) : MotionLayout(context, attrs, defStyleAttr) {

private var mInitX = 0f
private var mInitY = 0f

private var mTouchSlop = 10

override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {

when (ev.actionMasked) {
MotionEvent.ACTION_DOWN -> {
mInitX = ev.x
mInitY = ev.y
}
MotionEvent.ACTION_MOVE -> {
val moveX = abs(x - mInitX)
val moveY = abs(y - mInitY)

if (moveX > mTouchSlop || moveY > mTouchSlop){

val obtain = MotionEvent.obtain(ev)
obtain.action = MotionEvent.ACTION_DOWN
dispatchTouchEvent(obtain)
onTouchEvent(obtain)
return true
}
}
MotionEvent.ACTION_UP -> {
}
}
return false
}


}

为我工作

关于android - 如何将点击监听器添加到轮播项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72246172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com