【问题标题】:Android path to array - read the points on a path?数组的Android路径 - 读取路径上的点?
【发布时间】:2011-03-11 23:11:56
【问题描述】:

有没有办法读取绘制路径时创建的点?在我看来,路径无法读取是很愚蠢的。

还是手动将当前手指位置写入数组更好?

谢谢

【问题讨论】:

    标签: android path


    【解决方案1】:

    您可以从任何路径读取任意数量的点。 示例如何从路径中间读取坐标:

        PathMeasure pm = new PathMeasure(myPath, false);
        //coordinates will be here
        float aCoordinates[] = {0f, 0f};
    
        //get coordinates of the middle point
        pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null);
    

    您可以从路径起点经过任意距离来获取点坐标。

    【讨论】:

    • pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null);返回布尔值然后我们是点???
    • @JhansiKiRani,他就在那儿说://坐标将在这里。所以在一个坐标中。
    • 如何使用此答案方法获得用手指绘制的直线上的点?假设它是未知的,但起点保存在Path
    • @dan 假设你想要 11 个点(10 个相等的段):``` // 开头:pm.getPosTan(pm.getLength() * 0.0f, aCoordinates, null); // 第一点:pm.getPosTan(pm.getLength() * 0.1f, aCoordinates, null); // 第二点:pm.getPosTan(pm.getLength() * 0.2f, aCoordinates, null); // 第三点:pm.getPosTan(pm.getLength() * 0.3f, aCoordinates, null); // 等等 // 最后一点 pm.getPosTan(pm.getLength(), aCoordinates, null); ```
    • 感谢您的回复。那么那么aCoordinates中的坐标会变成对应的距离呢?
    【解决方案2】:

    据我所知,我认为您无法获得以前添加的点,但您可以扩展 Path 类并创建自己的类,覆盖 add 方法,然后将这些点存储在数组或列表或任何您想要的更喜欢。

    【讨论】:

    • 谢谢,我就是这么想的。我认为扩展类不会增加任何东西,而不仅仅是将 onMyTouchEvent 中的点 (x, y) 添加到 ArrayList 中。
    【解决方案3】:

    您在问题中提到了手指位置。如果您正在绘制和使用运动事件,您可以在事件期间将 X 和 Y 位置添加到 ArrayList,其中所有偶数索引都是 X,赔率是 Y。我在我创建的几个绘图应用程序中使用了它。要重新创建路径,您只需要一个 for 循环和 Path.lineTo()。

    此外,如果您使用特定颜色(例如 Color.Black)绘制了视图的路径,则可以使用 Bitmap.getPixels(...) 并创建一个数组 {x0,y0,x1,y1,... .xn,yn} 基于类似的 for 循环

    int i = 0;
    for(int y = 0; y < bitmap.getHeight(); y++){
        for(int x = 0; x < bitmap.getWidth(); x++){
            if(pixels[y*bitmap.getWidth()+x] == Color.BLACK){
                xy[i] = x;
                i++;
                xy[i] = y;
                i++;
            }
        }
    }
    

    数组 xy 有你所有的坐标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2020-04-27
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2010-09-10
      • 2012-06-26
      相关资源
      最近更新 更多