我目前正在 Android 上构建应用程序。现在请记住,我是一个业余爱好者,但我已经能够弄清楚我需要为我的非常简单的应用程序弄清楚的大部分内容。但是这个问题一直困扰着我,我找不到解决办法。
对于背景,我一直使用左右滑动来“滚动”不同的文本选项。但是,我想在每次单击时更改一个完全不同的文本字段。
例如,当我滑动时,textview1 会发生变化,而每次单击时,textview2 都会发生变化。但它们在同一页上。
我的代码适用于滑动,但当我点击时,它执行的功能与我向右滑动时的功能相同。
这是我正在使用的代码,如果对我做错的事情有任何帮助,我们将不胜感激:
final float len = getResources().getDisplayMetrics().densityDpi/6;
linear1.setOnTouchListener(new View.OnTouchListener() {
float initX;
float initY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
initX = event.getX();
initY = event.getY();
break;
case MotionEvent.ACTION_UP:
initX -= event.getX();
initY -= event.getY();
if (initY > len) {
//Logic For Swipe Right
} else if(initY < -len) {
//Logic For Swipe Left
} else {
if(initY < 0) initY = -initY;
if(initX < 0) initX = -initX;
if(initX <= len/4 && initY <= len/4) {
//Logic For OnClick
}
}
break;
}
return true;
}
});
另一个小问题是它也在检测向上和向下滑动。向下滑动执行右侧滑动应该执行的操作,向上滑动执行左侧滑动应该执行的操作。我只想要左右滑动检测,根本不需要上下滑动。
先谢谢大家了!希望你能帮助这个菜鸟!
最佳答案
在您的 onTouch()
方法中,您可以检查事件的来源是否正在触摸您的 textview2 TextView。在这种情况下,忽略该事件并让您的 textview2 的 onClick() 方法处理它:
linear1.setOnTouchListener(new View.OnTouchListener() {
float initX;
float initY;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v == textview2) {
return;
}
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
initX = event.getX();
initY = event.getY();
break;
case MotionEvent.ACTION_UP:
initX -= event.getX();
initY -= event.getY();
if (initY > len) {
//Logic For Swipe Right
} else if(initY < -len) {
//Logic For Swipe Left
}
break;
}
return true;
}
});
关于javascript - 滑动检测和点击检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54889579/