gpt4 book ai didi

java - 为什么我的拖动方法滞后?

转载 作者:行者123 更新时间:2023-12-01 09:03:47 26 4
gpt4 key购买 nike

我在以下情况下使用 onTouchEvent() 方法:

case MotionEvent.ACTION_MOVE:
if (motionEvent.getHistorySize() > 0) {
for (int i = 1, n = motionEvent.getHistorySize(); i < n; i++) {
int calcX = (int) motionEvent.getHistoricalX(i) - (int) motionEvent.getHistoricalX(i - 1);
treesX += calcX;
}
}
break;

treesX 变量表示将背景绘制为位图的点,并在其旁边绘制另一个背景,并将屏幕宽度添加到 treesX,并且屏幕宽度滚动后,两个图像都会跳回一个屏幕宽度,以产生无缝背景的效果,如以下代码所示:

public void draw() {
if (ourHolder.getSurface().isValid()) {
canvas = ourHolder.lockCanvas();

if ((int) treesX < -screenWidth) {
treesX += screenWidth;
}
if ((int) treesX > 0) {
treesX -= screenWidth;
}
canvas.drawBitmap(trees, null, new Rect((int) treesX, 0, screenWidth + (int) treesX, screenHeight), paint);
canvas.drawBitmap(trees, null, new Rect((int) treesX + screenWidth, 0, 2 * screenWidth + (int) treesX, screenHeight), paint);

}
ourHolder.unlockCanvasAndPost(canvas);
}

这意味着两个背景应该始终彼此相邻,但是当我滚动屏幕时,它们会稍微分开或稍微重叠,有什么方法可以纠正这个问题吗?代码的任何部分导致它们不同步?

最佳答案

当用户拖动时,您将收到许多带有 ACTION_MOVEMotionEvent。每个事件的历史记录大小都会比上一个事件更大。这意味着用户拖动的次数越多或手指按住的时间越长,您的 for 循环的执行时间就会越长。

您实际上没有必要循环所有历史值来计算当前已拖动的距离。只需保存初始 ACTION_DOWN 的 X 值,然后在每次 ACTION_MOVE 上将最新的 X 值与保存的值进行比较。

关于java - 为什么我的拖动方法滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com