Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同屏幕尺寸上onTouch event.getX或Y的一致性-Android_Android_Android Layout_Android View_Android Event_Android Screen Support - Fatal编程技术网

不同屏幕尺寸上onTouch event.getX或Y的一致性-Android

不同屏幕尺寸上onTouch event.getX或Y的一致性-Android,android,android-layout,android-view,android-event,android-screen-support,Android,Android Layout,Android View,Android Event,Android Screen Support,我正在自定义视图上实现一个OnTouchListener。在这个视图中,我画了一个基本上沿x轴和y轴移动的对象,我从event.getX()中得到它和事件.getY()分别为 当触摸事件发生在屏幕中的特定位置时,我想执行一些绘制更改。问题是,不同屏幕大小的值不同。例如,WVGA设备上的X值为60,平板电脑上的值为100。由于这是不一致的,我无法编写一个适当的if条件 根据您以前的经验,有人能为您提供解决方案吗?您可以设置希望在ie 800 x 600上接收触摸事件的基本屏幕大小。然后你可以得到设

我正在自定义视图上实现一个
OnTouchListener
。在这个视图中,我画了一个基本上沿x轴和y轴移动的对象,我从
event.getX()中得到它
事件.getY()分别为

当触摸事件发生在屏幕中的特定位置时,我想执行一些
绘制
更改。问题是,不同屏幕大小的值不同。例如,WVGA设备上的X值为60,平板电脑上的值为100。由于这是不一致的,我无法编写一个适当的
if
条件


根据您以前的经验,有人能为您提供解决方案吗?

您可以设置希望在ie 800 x 600上接收触摸事件的基本屏幕大小。然后你可以得到设备的实际分辨率,并以此来调整你的基本数量。即X尺寸为(800/设备宽度),然后将设备屏幕触摸坐标乘以此比例因子,得到“翻译”版本。

您可以得到任何设备的分辨率。您可以执行一些操作,例如获取屏幕的getWidth()和getHeigth()。然后您可以设置宽度/2和高度/2的逻辑->显示屏幕的左上部分。像这样做。

我基本上对这两个答案都有好的想法,(恕我直言),但对我有效的解决方案如下。这个想法来自Chintan Raghwani的线索

因此,假设设备屏幕上的
位置x
值等于总
视图
宽度乘以
百分比

示例:
posX=getMeasuredWidth()*0.5
将为您提供在中心处理的触摸事件。通过这种方式定位对象将使其在所有设备中保持一致

希望它能帮助一些人:)

编辑:


很幸运找到了这个帖子。这就是上面的过程,也被称为黄金比率,这是一篇关于这方面的好文章

谢谢你的快速回复。请不要介意我的清白。我不能正确地得到算法。请帮忙。我的视图位于视图的fill_parent中,因此screenWidth=getMeasuredWidth()。我对你提到的比例因子感到困惑。提前感谢。假设您在300x200的屏幕上开发了应用程序。您希望检测用户何时触摸屏幕左侧。因此,如果(touch.x<150){//do something}那么如果将其安装在屏幕大小为600x200的设备上,那么如果(x<150)仅在触摸屏幕最左侧时才起作用,而不是从中间点。因此,您需要做的是缩放touch.x值。因此,您的设备上有X(300),新设备上有X(600)。300 / 600 = 0.5... 因此,您收到的任何触摸事件坐标都需要将它们乘以0.5,以获得它们相对于if语句参数的值。该链接不起作用。请共享正确的链接