iphone - 如何在 Android 和 iPhone 上实现相同的 throw 效果

标签 iphone android scroll touches

我将一款游戏从 iPhone 移植到了 Android。全部基于 OpenGL,并且滚动计算完全相同。我注意到,在 iPhone 上滚动游戏时,我可以更快地滚动,并且抬起手指时的启动速度感觉与手指移动时的速度相同。

但是不幸的是,在 Android 设备上,这并不相同。当我在滚动时抬起手指时,开始滚动速度感觉更慢。在 iPhone 上滚动感觉更准确。

Android 处理触摸的方式与 iPhone 有何不同?我如何利用这一点来实现与 iPhone 类似的感觉。在 Android 上,所有应用程序在滑动时,我抬起手指的速度与我手指移动的速度感觉不一样。

最佳答案

我找到了。对于相同(或接近)的位置,android 会给出一个 ACTION_MOVE,然后给出一个 ACTION_UP。 iPhone 根本不这样做!它只是给出了一个触摸结束!因此,如果有运动,我在 Android 上至少有 3 个点,但在 iPhone 上有 2 个点(在不同位置触地、触地)

接下来的事情是ACTION_MOVE和ACTION_UP不会立即发生,并且在计算采样点的平均速度时其显着的时间间隔。

解决方案:在ACTION_UP上,如果有ACTION_MOVE,则滑动存储的所有秒数,以便ACTION_MOVE在ACTION_UP发生时“发生”。不要将最后的修饰点纳入速度计算中。现在像往常一样计算速度。

摘要

在 Android 上,如果您移动了手指,您会在 ACTION_UP 之前收到 ACTION_MOVE。并且 ACTION_UP 与 ACTION_MOVE 大致处于相同位置,使得结束时的速度看起来大约为 0。iPhone 不会这样做,iPhone 不会为最后一次 TouchEnded 提供 TouchMoved(IE 触碰、移动手指、抬起) ,如果您在 iPhone 上执行得足够快,您将不会获得 TouchMoved 手指的中间事件,而在 Android 上则如此)。

Android/iPhone 同等产品

  1. ACTION_UP = 触摸结束
  2. ACTION_DOWN = 触摸开始
  3. ACTION_MOVE = 已移动

我还注意到 Android 上有一些点历史功能。我没有使用那些。我将触摸和时间戳存储在我自己的数组中。

关于iphone - 如何在 Android 和 iPhone 上实现相同的 throw 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031384/

相关文章:

ios - 如何使用 AVPlayer 在 iOS 中播放 protected 视频内容

iphone - 屏幕上 CALayers 的混合模式?那可能吗?

html - 滚动到 ID 根本不起作用?怎么了?

jquery - 在自定义 div 下拉菜单中发生键盘导航时移动垂直滚动条

css - 溢出:滚动导致图像被截断

iphone - 仅使用 Core Graphics 和 CADisplayLink 的图像动画示例

ios - 如何将一个 Storyboard用于具有自动布局(ios 6 + ios 7)的 4"and 3.5"iphone 屏幕?

java - 处理不同 Activity 、 fragment 、任务等之间的通用代码

android - 具有自定义样式的 TextView 导致奇怪的膨胀异常

java - 为我的按钮着色的最佳方式?