gpt4 book ai didi

android - 如何同时处理 OnTouchListener 事件和 OnClickListener 事件

转载 作者:行者123 更新时间:2023-12-02 12:08:46 28 4
gpt4 key购买 nike

我有 RecyclerView我设置每个项目OnTouchListenerOnClickListener OnTouchListener:

override fun onBindViewHolder(holder: ItemListViewHolder, position: Int) {
val item = getItem(position)
holder.bind(item)
holder.itemView.cardview.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
Log.d(TAG, "onBindViewHolder: $event.buttonState")
this.startDragListener.onStartDrag(holder)
}
return@setOnTouchListener true
}
}
OnClickListener: (在 View 支架内)
 init {
itemView.setOnClickListener(this)
}

override fun onClick(v: View?) {
onItemClickListener.onItemClick(adapterPosition)
}
问题是当我点击该项目时,只有 startDragListener触发,但点击事件从未触发。
我在stackoverflow上阅读了一些关于这个问题的类似问题,但其中大多数都是非常旧/不推荐使用的方法
如何解决此问题并同时处理触摸监听器和点击监听器?

最佳答案

看,onClickListener 不能与 onTouchListener 一起使用。您必须实现一些逻辑来区分 onTouchListener 中的单击和拖动。我做了这样的事情,代码在java中,但你可以得到一个想法。

switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
x = motionEvent.getX();
y = motionEvent.getY();
return true;

case MotionEvent.ACTION_UP:
// PUT ON CLICK LOGIC HERE
break;
case MotionEvent.ACTION_MOVE:
if ((motionEvent.getX() - x) > 80 || (x - motionEvent.getX()) > 80
|| (motionEvent.getY() - y) > 50 || (y - motionEvent.getY()) > 60) {
view.startDrag(data, new View.DragShadowBuilder(view) {
@Override
public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
shadowSize.set(view.getWidth(), view.getHeight());
shadowTouchPoint.set((int) motionEvent.getX(), (int) motionEvent.getY());
}
}, view, 0);
}
return true;

}

关于android - 如何同时处理 OnTouchListener 事件和 OnClickListener 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63811840/

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