gpt4 book ai didi

java - PointF.set(x,y) 与 java 中的 new PointF(x,y) 有何不同?

转载 作者:行者123 更新时间:2023-12-01 18:08:20 28 4
gpt4 key购买 nike

我正在尝试在 Android 应用程序中为 Canvas View 实现滚动。

我初始化一个全局

private PointF backgroundPosition = new PointF(0, 0);

然后是这个的行为

backgroundPosition.set(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));

还有这个

backgroundPosition = new PointF(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));

由于某种原因有所不同(第一个版本的滚动速度要快得多!!!)

为什么?!!!我花了一整天的时间!

完整代码如下:

    public boolean onTouchEvent(@NonNull MotionEvent event, GII.AppState appState) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
pressedHere = true;
canvasMovingStartingPoint.set((int) event.getX(), (int) event.getY());
lastBackgroundPosition = backgroundPosition;
break;
case MotionEvent.ACTION_MOVE:
if (pressedHere &&
Math.sqrt((canvasMovingStartingPoint.x - event.getX()) * (canvasMovingStartingPoint.x - event.getX()) +
(canvasMovingStartingPoint.y - event.getY()) * (canvasMovingStartingPoint.y - event.getY())) > 10)
moving = true;
if (pressedHere && moving) {
backgroundPosition.set(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));
//backgroundPosition = new PointF(lastBackgroundPosition.x + (canvasMovingStartingPoint.x - event.getX()), lastBackgroundPosition.y + (canvasMovingStartingPoint.y - event.getY()));
checkBackground();
}
break;
case MotionEvent.ACTION_UP:
if (pressedHere && !moving) {
click(event.getX(), event.getY());
}
moving = false;
break;
default:
return false;
}
return true;
}

取消注释该行会使一切变得完美,问题是为什么?

最佳答案

在下面的示例中,您将创建 PointF 的新实例

在顶部,您只需更改实例值。

创建实例的内存成本可能比重用它们要高得多,因此您会冗余地创建多余的对象。这是一个低成本,但您应该避免创建不必要的对象。就像您应该避免代码中不必要的任何内容一样。

另外一点,根据我的理解,PointF 中的 x,y 值是最终的,因此无法更改。因此,第二个选项似乎是您必须采用的方式,因为 set 方法似乎仅适用于空实例。如果它使您的程序速度减慢很多,您始终可以将值存储在两个 float 中。

关于java - PointF.set(x,y) 与 java 中的 new PointF(x,y) 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689836/

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