Android 拦截回收器查看手势左右滑动,安卓?
我有一个回收站。当用户向右或向左滑动时,执行一些操作。 请注意,我不是要求回收者查看项目刷卡,而是要求整个回收者查看手势向左或向右 为此,我扩展了View.OnTouchListener,并尝试获得如下姿势Android 拦截回收器查看手势左右滑动,安卓?,android,android-recyclerview,ontouchlistener,Android,Android Recyclerview,Ontouchlistener,我有一个回收站。当用户向右或向左滑动时,执行一些操作。 请注意,我不是要求回收者查看项目刷卡,而是要求整个回收者查看手势向左或向右 为此,我扩展了View.OnTouchListener,并尝试获得如下姿势 public class OnSwipeTouchListener implements View.OnTouchListener { private final GestureDetector gestureDetector; public OnSwipeTouchListener(C
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();
}
});
但是我没有收到回电。这有什么不对?根据该官员的说法,在处理视图组时,您必须使用onInterceptTouchEvent
(RecyclerView
扩展视图组
)。
因此,您必须扩展RecyclerView
类,以覆盖其onTouchInterceptTouchEvent
方法:
public class MyRecyclerView extends RecyclerView {
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (MotionEventCompat.getActionMasked(ev)) {
case MotionEvent.ACTION_MOVE: {
[...]
}
}
}
}
然后,您还必须更改布局XML文件以使用自定义的RecyclerView
MyRecyclerView
或者,您可以调整涉及第三方组件/库的解决方案,如或。到目前为止您取得了任何进展吗?@alex没有,我仍在努力找出答案。如果您找到了解决方案,请务必告诉我。您是否尝试过我的建议继承RecyclerView
?@alex我尝试过,但没有成功。我在parent recyclerview中有一个child recyclerview,我想在child recyclerview上左/右滑动,您是否创建了自己的类来扩展recyclerview
?