如何在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语句,以某种方式修改它?