如何在Android中使用滚动视图微调滑动。滑动和滚动似乎有冲突

如何在Android中使用滚动视图微调滑动。滑动和滚动似乎有冲突,android,scrollview,swipe,onfling,Android,Scrollview,Swipe,Onfling,我编写了多个活动的代码,这些活动当前通过按钮在它们之间移动。我想换成刷卡。我在每个活动上都有带文本视图的滚动视图,当添加滑动代码(如中的)时,我会遇到滑动和滚动之间的冲突。有时,滚动手势被误认为是滑动,反之亦然。我如何微调这个问题。以下是我的一些代码: public class Activity extends AppCompatActivity { private GestureDetectorCompat gestureObject; private float x1,x2;

我编写了多个活动的代码,这些活动当前通过按钮在它们之间移动。我想换成刷卡。我在每个活动上都有带文本视图的滚动视图,当添加滑动代码(如中的)时,我会遇到滑动和滚动之间的冲突。有时,滚动手势被误认为是滑动,反之亦然。我如何微调这个问题。以下是我的一些代码:

public class Activity extends AppCompatActivity {

private GestureDetectorCompat gestureObject;
    private float x1,x2;
    static final int MIN_DISTANCE = 300;



protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
      gestureObject = new GestureDetectorCompat(this, new StageOneSlideOverviewActivity.LearnGesture());

}
    @Override
    public boolean dispatchTouchEvent(MotionEvent event){
        this.onTouchEvent(event);
        return super.dispatchTouchEvent(event);
    }

@Override
public boolean onTouchEvent(MotionEvent event) {
    this.gestureObject.onTouchEvent(event);
    boolean swapped = false;


    if(swapped){
        swapped = false;
        return super.onTouchEvent(event);
    }
    int action = event.getAction();
    if (action == MotionEvent.ACTION_DOWN) {
        x1 = event.getX();
    } else if (action == MotionEvent.ACTION_UP) {
        x2 = event.getX();
        float deltaX = x2 - x1;
        if (Math.abs(deltaX) > MIN_DISTANCE) {
            Toast.makeText(this, "left2right swipe", Toast.LENGTH_SHORT).show();
            swapped = true;
        } else {

        }
    }
    return super.onTouchEvent(event);

}


class LearnGesture extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {

        if (event2.getX() < event1.getX()) {

            Intent intent = new Intent(StageOneSlideOverviewActivity.this, StageOneSlideOneActivity.class);

            startActivity(intent);
        } else if (event2.getX() > event1.getX()) {

            Intent intent = new Intent(StageOneSlideOverviewActivity.this, StageOneActivity.class);
            //finish(); //finish is used to stop history for mainActivity class
            startActivity(intent);

        }
        return true;
    }
公共类活动扩展了AppCompatActivity{
私人手势检测器兼容手势对象;
私有浮点数x1,x2;
静态最终内部最小距离=300;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
gestureObject=new GestureDetectorCompat(这是新阶段的SlideOverviewActivity.LearnGetSture());
}
@凌驾
公共布尔dispatchTouchEvent(MotionEvent){
本事件(事件);
返回super.dispatchTouchEvent(事件);
}
@凌驾
公共布尔onTouchEvent(运动事件){
this.gestureObject.onTouchEvent(事件);
布尔交换=假;
如果(交换){
交换=假;
返回super.onTouchEvent(事件);
}
int action=event.getAction();
if(action==MotionEvent.action\u DOWN){
x1=event.getX();
}else if(action==MotionEvent.action\u UP){
x2=event.getX();
浮动deltaX=x2-x1;
如果(数学绝对值(deltaX)>最小距离){
Toast.makeText(这是“left2right swipe”,Toast.LENGTH_SHORT.show();
交换=真;
}否则{
}
}
返回super.onTouchEvent(事件);
}
类LearnGetSture扩展了GestureDetector.SimpleOnGestureListener{
@凌驾
公共布尔onFling(MotionEvent事件1、MotionEvent事件2、float-velocityX、float-velocityY){
if(event2.getX()event1.getX()){
意向意向=新意向(StageOneSlideOverviewActivity.this,StageOneActivity.class);
//finish();//finish用于停止mainActivity类的历史记录
星触觉(意向);
}
返回true;
}
此外,最小距离参数是什么?它的作用是什么?
非常感谢

MIN_DISTANCE
似乎是指在检测到移动作为滑动之前拖动手指的时间。因此,增加该距离意味着您必须在抬起手指之前拖动更长的时间,才能检测到移动作为滑动。```if(swapped){swapped=false;return super.onTouchEvent(event);}```一旦第二个活动启动,您将不再在第一个活动中接收触摸事件。因此,我不明白为什么会有这个“交换”变量。谢谢-Jarvis。我是否应该删除这个if语句,以某种方式修改它?