首页 > 解决方案 > getTouchMajor() 不精确:我无法获得有关触摸区域长度的实际值

问题描述

当我用手指触摸安卓手机的屏幕时,我想显示触摸区域的长度和宽度。在尝试了getTouchMajor()的方法后,它只能为我提供[55、99、123、187、219、250等]的离散数字,而不是触摸区域变化时的连续变化。

相反,getX() 和 getY() 方法非常敏感,可以提供触摸位置的连续值。但是 getTouchMajor() 和 getTouchMinor 无法做到这一点。

@Override
public boolean onTouchEvent(MotionEvent event) {
    float touchX = event.getX();
    float touchY = event.getY();
    float touchWidth = event.getTouchMajor();
    float touchLength = event.getTouchMinor();


    TextView textX = findViewById(R.id.touch_x);
    TextView textY = findViewById(R.id.touch_y);
    TextView textWidth = findViewById(R.id.touch_width);
    TextView textLength = findViewById(R.id.touch_length);


    textX.setText(Float.toString(touchX));
    textY.setText(Float.toString(touchY));
    textWidth.setText(Float.toString(touchWidth));
    textLength.setText(Float.toString(touchLength));

    return super.onTouchEvent(event);
}

当我触摸屏幕时,我希望在手机上看到触摸宽度和触摸长度值的连续变化。

我遇到的另一个小问题:输出的长度和宽度是相同的,但我认为它们应该不同,因为文档说触摸区域是日食。

标签: javaandroid

解决方案


问题是我使用的硬件并不完全支持这些方法。顺便说一句,我在这个链接中受到了 Camilla 的启发:Android 手指检测 - 方向和椭圆

然后我在 4 台安卓设备上测试了我的程序:Nexus 5、Galaxy Note 8、Galaxy Tab S 和 Pixel 3 XL。

结果:

  1. Galaxy Note 8、Galaxy Tab S 和 Pixel 3 XL 可以区分长轴和短轴。

  2. 所有 4 台设备都无法通过 getOrientation() 方法返回有意义的值。

  3. Galaxy Note 8 的精度最好,其次是 Galaxy Tab S 和 Pixel 3 XL,Nexus 5 的精度较差。


推荐阅读