Java 如何绘制方向路径并检测是否跟踪-Android
我正在开发一个应用程序,它在画布上绘制字母,并检测用户是否以正确的形式跟踪字母。我尝试了不同的技巧,似乎找不到覆盖所有信件的最佳方法。字母是漫画式的无字体,由于f和s的形式,这是相当困难的。这是小写字母由于在这里发布了这个答案,我多次尝试最终得到了我需要的答案: 这就是我为完成任务所做的:Java 如何绘制方向路径并检测是否跟踪-Android,java,android,Java,Android,我正在开发一个应用程序,它在画布上绘制字母,并检测用户是否以正确的形式跟踪字母。我尝试了不同的技巧,似乎找不到覆盖所有信件的最佳方法。字母是漫画式的无字体,由于f和s的形式,这是相当困难的。这是小写字母由于在这里发布了这个答案,我多次尝试最终得到了我需要的答案: 这就是我为完成任务所做的: 获取路径的起点 然后我创建了一个单独的路径,当用户触摸接近起始点时,该路径从该点开始(我们称之为轨迹路径) 最后,我继续计算路径的点,该点稍微超前于用户轨迹路径,并查看触摸点和预期点之间的差异是否相当接近 下
Path Measure pm = new PathMeasure(myPath, false);
pm.getPosTan(0, floatPoints, null);
//This functions says whether the offset from path was too great to accept
private boolean isMajorOffset(float point1, float point2, int tolerance){
float difference = Math.abs(point1 - point2);
return tolerance < Math.floor(difference) && tolerance < Math.ceil(difference);
}
private void touch_start(float x, float y){
//get point as float
float floatPoints[] = {0f, 0f};
//get current start point
pm.getPosTan(0, floatPoints, null);
Point startPoint = new Point((int)floatPoints[0], (int)floatPoints[1]);
//if startPoint is selected then set path as started
if((startPoint.x >= x - TOUCH_TOLERANCE && startPoint.x <= x + TOUCH_TOLERANCE)
&& (startPoint.y >= y - TOUCH_TOLERANCE && startPoint.y <= y + TOUCH_TOLERANCE))
{
PathStarted = true;
Toast.makeText(this.getContext(), "Started", Toast.LENGTH_SHORT).show();
//move trail path to this point
trailPath.moveTo(startPoint.x, startPoint.y);
}
}
private void touch_move(float x, float y){
if(PathStarted==false){
return;
}
//get lenght of trail path
PathMeasure tm = new PathMeasure(trailPath, false);
//get point as float
float floatPoints[] = {0f, 0f};
//get current start point
pm.getPosTan(tm.getLength() + 1, floatPoints, null);
Point point = new Point((int)floatPoints[0], (int)floatPoints[1]);
//if offset is ok continue with trail path
if(!isMajorOffset(point.x, x, TOUCH_TOLERANCE) && !isMajorOffset(point.y, y, TOUCH_TOLERANCE))
{
//move current path to this point
trailPath.lineTo(point.x, point.y);
}
else {
PathStarted = false;
Toast.makeText(this.getContext(), "Ended", Toast.LENGTH_SHORT).show();
}
}
Path-Measure pm=new-pathmasure(myPath,false);
pm.getPosTan(0,浮点,空);
//此函数表示与路径的偏移是否太大而无法接受
专用布尔isMajorOffset(浮点1、浮点2、整数容差){
浮点差=数学绝对值(点1-点2);
返回公差<数学下限(差异)&公差<数学上限(差异);
}
专用无效触摸启动(浮动x、浮动y){
//以浮点形式获取点
浮点数[]={0f,0f};
//获取当前起点
pm.getPosTan(0,浮点,空);
点开始点=新点((int)浮点点[0],(int)浮点点[1]);
//如果选择了startPoint,则将路径设置为started
如果((startPoint.x>=x-TOUCH\u-TOUCH\u-TOLERANCE&&startPoint.x=y-TOUCH\u-TOUCH\u-TOLERANCE&&startPoint.y,这里描述了如何使用手势。也许你会想使用他们宣传的解决方案:谢谢,但是手势无法工作,因为手势无法根据路径进行测量。这就是我试图实现的目标