我在Android中有一个由矩阵控制平移的OpenGL ES视图。我正在尝试找到一种方法来获得类似于Google地图应用程序或iPhone中看到的动量滚动的提示。谢谢。
我在Android中有一个由矩阵控制平移的OpenGL ES视图。我正在尝试找到一种方法来获得类似于Google地图应用程序或iPhone中看到的动量滚动的提示。谢谢。
如果你的问题是2D的,那就很简单:
你的onTouch函数将会找到手指的加速度。我忘了从距离中如何获取加速度的公式。应该是具有时间变量的位置的二阶导数。但你应该始终将deltaX、deltaY转换为加速度。为了简单起见,你不需要放置精确的值。编辑:我不知道为什么我没有看到,但函数都在那里...
acceleration.x = 2(newposition.x - position.x - speed.x * elapsedTime) / (elapsedTime * elapsedTime);
一旦你有了加速度,你就可以用这段代码设置新位置。这就是2D物理动力学的简单应用。通过加速度,你可以找到你的速度,并且通过速度,你可以找到你的下一个位置。
speed.x = (float) (mass * acceleration.x * elapsed + speed.x);
speed.y = (float) (mass * acceleration.y * elapsed + speed.y);
position.x += mass * acceleration.x / 2 * elapsed * elapsed + speed.x * elapsed;
position.y += mass * acceleration.y / 2 * elapsed * elapsed + speed.y * elapsed;
speed.x *= friction;
speed.y *= friction;
质量和摩擦力将帮助您定义它的移动速度和自然减速的速度。如果您必须向后滚动以减速,则可能需要微调代码,因为这种动态并不完美。类似这样:
public void redraw() {
myScrollView.ySpeed = myScrollView.lastY-myScrollView.y;
myScrollView.xSpeed = myScrollView.lastX-myScrollView.x;
if (!userIsScrolling && ySpeed > 0) {
ySpeed--;
}
if (!userIsScrolling && xSpeed > 0) {
xSpeed--;
}
myScrollView.lastY = myScrollView.y;
myScrollView.y += ySpeed;
myScrollView.lastX = myScrollView.x;
myScrollView.x += xSpeed;
}
public void userStoppedScrolling() {
userIsScrolling = false;
}