我目前正在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;
}
});
另一个较小的问题是它也在检测上下滑动。向下滑动可以执行右侧滑动应该执行的操作,而向上滑动可以执行左侧滑动应该执行的操作。我只想要左右滑动检测,根本不需要上下滑动。
提前谢谢大家!希望你能帮助这个菜鸟!
答案 0 :(得分:1)
您需要为点击事件实现onClickListener。 onTouchListener在这种情况下是不够的(因为它旨在处理完全不同的事件类型)。
(已更新)就像这样:
linear1.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do things here, this will be run when the element is clicked
}
});
已更新(根据请求):您的onTouchListener应该(确实)现在包含此内容:
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
}
break;
}
return true;
}
});
希望这会有所帮助,
答案 1 :(得分:1)
在您的$str = '2019-02-26 10:30:00';
$date1 = ( ($a = (new DateTime($str))->setTime(12,00)) >= (new DateTime($str)) ) ? $a : $a->modify('+1 day');
$date2 = ( ($a = (new DateTime($str))->setTime(9,00)) >= (new DateTime($str)) ) ? $a : $a->modify('+1 day');
echo $date1->format('Y-m-d H:i:s'); //2019-02-26 12:00:00
echo $date2->format('Y-m-d H:i:s'); //2019-02-27 09:00:00
方法中,您可以检查事件的起源是否正在触摸textview2 TextView。在这种情况下,请忽略该事件,并让您的textview2的onClick()方法对其进行处理:
onTouch()