onTouch MotionEvent getTouchMinor和getTouchMajor总是完全相同的数字结果,为什么?

时间:2014-02-26 05:21:03

标签: android touch ontouchlistener

查看文档,touch major和touch minor是触摸事件的椭圆轴。一个用于触摸区域的最长测量长度,另一个用于最短的触摸事件。比如测量椭圆。

然而,我在几个Android平板电脑上测试了getTouchMajor和getTouchMinor方法的代码。并且用手指向下做这样做,使触摸屏幕的表面区域在一个方向上更长,所以它不会是一个圆圈。这样,最大和最小数字不应该相同。

问题在于,无论触摸击倒事件中触摸屏幕的区域是什么形状,它们都是完全相同的浮点数。唯一可行的方法是触摸屏幕的手指皮肤区域是圆圈。

所以基本上,这两款安卓平板电脑我把触摸触摸事件区域视为圆形区域,有时更大或更小,但总是使它成圆形,是否有任何设备可以为您提供更准确的形状?

我从这些功能中获得的唯一好消息是触摸区域的一般大小。

为什么两个数字都相同。这不是正确的结果吗?

if(event.getAction() == MotionEvent.ACTION_DOWN){
        float x = event.getX();
        float y = event.getY();
        float touchMajor = event.getTouchMajor(); // major axis of ellipse touch area
        float touchMinor = event.getTouchMinor(); // minor axis of ellipse touch area 

      //  Toast.makeText(context, "x " +  x , Toast.LENGTH_SHORT).show();
      // Toast.makeText(context, "y " +  y , Toast.LENGTH_SHORT).show();
        Toast.makeText(context, "touchMajor " + touchMajor , Toast.LENGTH_SHORT).show();
        Toast.makeText(context, "touchMinor " +  touchMinor , Toast.LENGTH_SHORT).show();

1 个答案:

答案 0 :(得分:4)

我的项目组和我对同样的事情感兴趣(我们发布了这个:Android finger detection - Orientation and ellipse

我们发现了一些暗示性评论,大多数设备的触摸屏驱动程序可能无法向系统提供此数据。

我们现在测试过: 三星Galaxy S2,HTC One,Nexus 5(LG)和Nexus 7(华硕),三星Galaxy Tap3

当我们测试三星Galaxy Tap 3时,我们最终得到了getTouchMajor()和getTouchMinor()的不同值,但是我们发现getTouchMajor()= getTouchMinor()* 3,在任何情况下都是如此,和所有其他设备一样,getOrientation()始终为0。

我们的结论是大多数设备不支持getTouchMajor(),getTouchMinor()。或getOrientation()。 这很可能是电容式触摸屏的限制。

基于图像处理的FTIR(沮丧的全内反射)或基于DI(漫射照明)的触摸表面等方法已经显示出更丰富的触摸交互数据。但据我们所知,这些方法都不适用于移动技术,也没有手持设备使用其中任何一种。

我们很高兴看到手持设备上这些指标的可能性无法实现。

编辑: 我刚刚通过我的同学发现,当你在开发者设置下激活输入>指针位置时,三星制作的谷歌Nexus 10 会显示带方向线的椭圆。

这向我表明,某些设备确实提供了getTouchMinor和getTouchMajor以及方向。 (或相同功能的历史版本)。 我自己没有机会为设备编码,但看起来似乎有道理。