- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Android 的“fingerpaint”示例有疑问:https://github.com/Miserlou/Android-SDK-Samples/blob/master/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.java .有一个细节我似乎无法理解。
在“ACTION_MOVE”运动事件中, View 使用 Path.quadTo
方法在 Canvas 上绘制一个新的路径段。这个发生在104行,如果我没理解错的话,Path的当前位置是(mX, mY)
,而(x, y)
就是用户所处的位置将指针移动到。所以 quadTo(mX, mY, (x + mX)/2, (y + mY)/2)
应该从 (mX, mY)
, < em>到 (x, y)
的一半,使用 (mX, mY)
作为控制点。
我不是贝塞尔曲线专家,但由于控制点与起点和终点共线,这看起来应该只是画一条直线,这意味着我们不妨调用 Path .lineTo
代替。此外,当我运行应用程序并移动指针时,会一直绘制一条线到新位置,而不是像我从代码中预期的那样只画了一半。将 (x + mX)/2
和 (y + mY)/2
替换为 x
和 y
,或者将 quadTo
替换为 lineTo
,不会产生明显的行为差异。
有谁能帮我解惑吗?
最佳答案
我有完全相同的问题。在对参数值进行了一些尝试之后,我的理解是:
Moreover, when I run the app and move the pointer, a line is drawn all the way to the new location, not just halfway as I would have expected from the code
每次绘制新路径时,起点和终点之间的距离都以像素为单位进行计算。对于每一个微小的移动,都会绘制出一条新路径。所以,最后我们有很多小路径一个接一个地画出来。你是对的,路径(直线,曲线)似乎一直画到尽头,而不仅仅是中途。然而,实际上发生的是它确实画了一半;每条新路径之间的距离非常小,我们不会注意到。让我用下面的截图来解释一下。在这两种情况下,我都尝试从屏幕的一侧绘制到另一侧。
这就是我们在 quadTo() 中使用终点坐标作为实际终点坐标时的样子
因此,当我们使用实际终点坐标时,路径在终点位置方面更加准确(请注意第二张照片中右侧的终点如何更接近屏幕的尽头?)
另一方面,起点、控制点和终点之间的距离影响路径的平滑度。在第二个屏幕截图中,我使用中间点作为控制点,这导致路径不太平滑。
至少我是这么理解的。如果有人有更准确的解释,请分享。
关于android - Android fingerpaint 示例中的 quadTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51506830/
我对 Android 的“fingerpaint”示例有疑问:https://github.com/Miserlou/Android-SDK-Samples/blob/master/ApiDemos/
Android的APIDemos中有FingerPaint demo。下面是手指在屏幕上移动时的代码。 private void touch_move(float x, float y) {
我是一名优秀的程序员,十分优秀!