java - 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);
}
当我触摸屏幕时,我希望在手机上看到触摸宽度和触摸长度值的连续变化。
我遇到的另一个小问题:输出的长度和宽度是相同的,但我认为它们应该不同,因为文档说触摸区域是日食。
解决方案
问题是我使用的硬件并不完全支持这些方法。顺便说一句,我在这个链接中受到了 Camilla 的启发:Android 手指检测 - 方向和椭圆。
然后我在 4 台安卓设备上测试了我的程序:Nexus 5、Galaxy Note 8、Galaxy Tab S 和 Pixel 3 XL。
结果:
Galaxy Note 8、Galaxy Tab S 和 Pixel 3 XL 可以区分长轴和短轴。
所有 4 台设备都无法通过 getOrientation() 方法返回有意义的值。
Galaxy Note 8 的精度最好,其次是 Galaxy Tab S 和 Pixel 3 XL,Nexus 5 的精度较差。
推荐阅读
- heap-memory - 查询完成后如何在 apache Drill 上释放堆内存?
- node.js - NestJS - 从其他服务创建业务对象
- dns - 为 Google 应用程序制造商设置域名
- python - 如果 heapify(x) 需要 O(n) heappush() 怎么能需要 O(log n)?
- c++ - MATLAB C 生成编码器可以生成适合嵌入式系统的 C 代码吗?
- php - 有没有一种方法可以在所有行上执行,而不仅仅是最近的?
- c# - 从 for 循环调用类
- azure-log-analytics - Azure 数据资源管理器查询语言-批处理和具体化
- .net-core - 加载动态加载程序集引用的 Nuget 包时出现 FileNotFoundException
- apache-kafka - 如何理解 Kafka 流?