如何让画布在android studio中跟随手指绘制平滑曲线

问题描述

我最初使用

编写代码

onTouchEvent(MotionEvent 事件){ .... 浮动 Xposition= event.getX(); ..... path.lineto(Xpositon,Yposition);//简单地从getX()和getY()获取当前指针位置 }

当您的手指快速划过屏幕时,这会留下锐利的边缘。这里要考虑的一点是,当您使用 getX() 和 getY() 时,它将仅在执行该命令时返回当前位置 x 位置最合适的值,中间会遗漏一些点(如果您想测试自己动手,在手机中打开开发者选项,打开指针位置,在app中尝试用手指快速绘制,你可以清楚地看到指针位置以红色显示的很多点不是你的绘图时应用程序。)

解决办法: 假设现在时间是 t1 执行 getX() 时

下一次执行 getX() 的时间为 t2

t1 和 t2 之间错过的点实际上存储在 getHistoricalX(int,int) // 要知道如何使用它,请参阅批处理部分下的此内容,您可以找到它:https://developer.android.com/reference/android/view/MotionEvent

将其用于其余的点 意味着先取t1的getX(),然后是历史点,然后是t2的getX()

这将主要解决问题。

解决方法

onTouchEvent(MotionEvent event){ .... float Xposition= event.getX(); ..... path.lineTo(Xpositon,Yposition);//简单地从getX()和getY()获取当前指针位置 }

当您的手指快速划过屏幕时,这会留下锐利的边缘。这里要考虑的一点是,当您使用 getX() 和 getY() 时,它将仅在执行该命令时返回当前位置 x 位置最合适的值,中间会遗漏一些点(如果您想测试自己动手,在手机中打开开发者选项,打开指针位置,在app中尝试用手指快速绘制,你可以清楚地看到指针位置以红色显示的很多点不是你的绘图时应用程序。)

解决方案:假设现在执行 getX() 时的时间是 t1

下一次执行 getX() 的时间为 t2

t1 和 t2 之间错过的点实际上存储在 getHistoricalX(int,int) // 要知道如何使用它,请参阅批处理部分下的此内容,您可以找到它:https://developer.android.com/reference/android/view/MotionEvent

将它用于其余的点意味着首先取 t1 的 getX(),然后是历史点,然后是 t2 的 getX()

这将主要解决问题。