gpt4 book ai didi

android - 是否有可能使基于 android webview 的应用程序在将点击解释为小拖动时不那么敏感?

转载 作者:行者123 更新时间:2023-12-03 13:40:26 24 4
gpt4 key购买 nike

我有和 C# Xamarin 安卓 中托管 reactjs 应用程序的应用程序网页浏览 .
在触摸屏安卓设备上使用此应用程序时,偶尔点击屏幕似乎会被忽略。
似乎正在发生的是,点击被解释为一个迷你拖动事件,因为点击中有一些小的方向移动。
看着安卓日志,对于失败的点击,我注意到如下输出:

adb -d logcat -s CustomFrequencyManagerService

06-19 13:35:49.225 2945 9989 D CustomFrequencyManagerService: acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 839000 uid : 1000 pid : 2945 pkgName : GESTURE_DETECTED@CPU_MIN@49
06-19 13:35:49.781 2945 2945 D CustomFrequencyManagerService: releaseDVFSLockLocked : Getting Lock type frm List : DVFS_MIN_LIMIT frequency : 839000 uid : 1000 pid : 2945 tag : GESTURE_DETECTED@CPU_MIN@49
注意 GESTURE_DETECTED日志条目的一部分。
但是,对于成功的点击,CustomFrequencyManagerService 在日志中没有输出。
看这个 react js 应用视角:
我注意到失败的水龙头会发出以下事件:
touchstart
touchend
而正常的成功事件是:
touchstart
touchend
mousedown
blur
mouseup
click
我可能会更改 reactjs 应用程序以直接响应触摸事件而不是点击事件,但我想知道 如果有办法 (希望通过 android 应用程序以编程方式) 改变对被解释为拖动而不是点击的敏感度 ?
通过安装 IOnTouchListenerAndroid.WebKit.WebView
_webView.SetOnTouchListener(new GestureIgnoreTouchListener());
我能够看到点击变成拖动的移动阈值。
    public class GestureIgnoreTouchListener : Java.Lang.Object, Android.Views.View.IOnTouchListener
{
float _x;
float _y;

public bool OnTouch(Android.Views.View v, MotionEvent e)
{
if (e.Action == MotionEventActions.Down)
{
_x = e.RawX;
_y = e.RawY;

return false;
}
if (e.Action == MotionEventActions.Up)
{
var diffX = e.RawX - _x;
var diffY = e.RawY - _y;

var distance = Math.Sqrt(Math.Pow(diffX, 2) + Math.Pow(diffY, 2));
// observed:
// if distance is 10 or less then this is interpreted as a click.
// if distance is 12 or greater, click is not emitted.
Console.WriteLine(distance);

return false;
}

return false;
}
}
理想情况下,如果距离在 10 到 50 之间,我希望能够将其视为单击而不是拖动。可能我可以创建一个合成点击事件,在这种情况下,但我希望我能以某种方式影响任何 android 代码负责将其解释为拖动的内容。

最佳答案

我见过人们在这种情况下使用两种方法。您已经提到的第一个:当您在触摸屏环境中时告诉 react 使用点击事件而不是点击事件。
第二个是考虑到 Android 所说的“ touch slop ”:
来自 https://developer.android.com/training/gestures/movement.html :

Because finger-based touch isn't always the most precise form ofinteraction, detecting touch events is often based more on movementthan on simple contact. To help apps distinguish betweenmovement-based gestures (such as a swipe) and non-movement gestures(such as a single tap), Android includes the notion of "touch slop".Touch slop refers to the distance in pixels a user's touch can wanderbefore the gesture is interpreted as a movement-based gesture. Formore discussion of this topic, see Managing Touch Events in aViewGroup.


Google 在此处提供了一种在不同上下文中处理它的方法示例: https://developer.android.com/training/gestures/viewgroup#vc你可能会适应你的情况。

关于android - 是否有可能使基于 android webview 的应用程序在将点击解释为小拖动时不那么敏感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62598737/

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