gpt4 book ai didi

android - 拦截回收者查看手势左右滑动,android?

转载 作者:行者123 更新时间:2023-11-29 02:28:58 26 4
gpt4 key购买 nike

我有一个回收 View 。当用户向右或向左滑动时执行一些操作。请注意,我不是要求回收站 View 项目滑动,而是整个回收站 View 向左或向右手势。

为此,我扩展了 View.OnTouchListener 并尝试获得如下手势

public class OnSwipeTouchListener implements View.OnTouchListener {

private final GestureDetector gestureDetector;

public OnSwipeTouchListener(Context ctx) {
gestureDetector = new GestureDetector(ctx, new GestureListener());
}

@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}

private final class GestureListener extends GestureDetector.SimpleOnGestureListener {

private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;

@Override
public boolean onDown(MotionEvent e) {
return true;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
result = true;
}
} /*else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
} else {
onSwipeTop();
}
result = true;
}*/
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}

public void onSwipeRight() {
}

public void onSwipeLeft() {
}


/*public void onSwipeTop() {
}

public void onSwipeBottom() {
}
*/
}

然后用作

recyclerViewComponent.setOnTouchListener(new OnSwipeTouchListener(context){
@Override
public void onSwipeRight() {
super.onSwipeRight();
}

@Override
public void onSwipeLeft() {
super.onSwipeLeft();
}
});

但是我没有收到回调。这有什么问题吗?

最佳答案

据官方Google doc在处理 ViewGroups(RecyclerView extends ViewGroup)时,您必须使用 onInterceptTouchEvent。所以你必须扩展 RecyclerView 类来覆盖它的 onTouchInterceptTouchEvent 方法:

public class MyRecyclerView extends RecyclerView {

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (MotionEventCompat.getActionMasked(ev)) {
case MotionEvent.ACTION_MOVE: {
[...]
}
}
}

}

然后您还必须更改您的布局 XML 文件以使用您的自定义 RecyclerView MyRecyclerView

或者,您可以调整涉及第 3 方组件/库的解决方案,例如 thisthis .

关于android - 拦截回收者查看手势左右滑动,android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50697829/

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