gpt4 book ai didi

java - 检测草率的点击 Android

转载 作者:行者123 更新时间:2023-11-30 01:29:40 24 4
gpt4 key购买 nike

我有一个 ImageView,我需要在其中区分单击和长按以及滑动。为此,我使用以下代码:

public boolean onTouch(View v, MotionEvent event) {
Log.d(getClass().getName(), "touch event: " + event.toString());
switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:
x1 = event.getX();
y1 = event.getY();
t1 = System.currentTimeMillis();
return true;
case MotionEvent.ACTION_UP:
x2 = event.getX();
y2 = event.getY();
t2 = System.currentTimeMillis();

if (x1 == x2 && y1 == y2 && (t2 - t1) < LONG_PRESS_TIMEOUT) {
//SHORT CLICK
}

如果时间超过 LONG_PRESS_TIMEOUT 则另一个 if 条件确定保持,如果触摸和释放的位置明显不同则滑动。无论如何,这是有效的,但是用户需要在完全相同的点按下并放开,这使得它无法识别有点粗糙或草率的触摸,我怎么能改变 if 条件以允许这些困惑的点击但同时时间不要将偏移设置为高,这样滑动就不会被误认为是点击。

最佳答案

定义一个允许“草率”点击的半径,这将有效地创建一个以初始点击为中心坐标的圆。然后验证释放坐标是否在该圆圈内。

要验证释放坐标是否在该圆内,您需要计算圆心与点之间的距离并验证它是否小于半径。 (有关所涉及的数学,请参阅 https://math.stackexchange.com/questions/198764/how-to-know-if-a-point-is-inside-a-circle)。

伪代码

bool isWithinCircle(int centerX, int centerY, int x, int y, double radius)
{
var temp = pow(x - centerX, 2) + pow(y - centerY, 2);
return sqrt(temp) < r;
}

那么您的 if 条件将是:

if (isWithinCircle(x1, y1, x2, y2, radius) && (t2 - t1) < LONG_PRESS_TIMEOUT) {
//SHORT CLICK
}

关于java - 检测草率的点击 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com