是否有可能使基于 android 网络视图的应用程序在将水龙头解释为小阻力时不那么敏感?



我有和C# Xamarinandroid应用程序,它在webview中托管一个reactjs应用程序。

在触摸屏安卓设备上使用此应用程序时,似乎偶尔点击屏幕会被忽略。

似乎正在发生的事情是,水龙头被解释为一个迷你拖动事件,因为水龙头中有一些小的方向运动。

查看android日志,对于失败的水龙头,我注意到输出如下:

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在日志中没有输出。

reactjs应用程序的角度来看:

我注意到失败的点击会发出以下事件:

touchstart
touchend

而正常成功的事件是:

touchstart
touchend
mousedown
blur
mouseup
click

我可能会更改 reactjs 应用程序以直接响应触摸事件而不是单击事件,但我想知道是否有办法(希望通过 android 应用程序以编程方式(来改变被解释为拖动而不是点击的灵敏度

通过在Android.WebKit.WebView上安装IOnTouchListener

_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 代码。

我看到人们在这种情况下使用两种方法。你已经提到的第一个:当你在触摸屏环境中时告诉反应使用点击事件而不是点击事件。

第二个是考虑到Android所说的">触摸倾斜":

从 https://developer.android.com/training/gestures/movement.html:

因为基于手指的触摸并不总是最精确的形式 交互,检测触摸事件通常更多地基于运动 比简单的接触。帮助应用区分 基于移动的手势(如轻扫(和非移动手势 (例如单击(,Android包含"触摸倾斜"的概念。 触摸斜率是指用户的触摸可以漂移的距离(以像素为单位( 在将手势解释为基于移动的手势之前。为 有关此主题的更多讨论,请参阅在 视图组。

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

最新更新