java - 在android中绘制多条路径

标签 java android android-canvas

我正在使用手指移动在 android Canvas 中绘制闭合路径。这是我的代码

switch (event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    startPoint = new PointF(event.getX(), event.getY());
                    endPoint = new PointF();
                    hotSpot = new HotSpots();
                    endPoint.x = event.getX();
                    endPoint.y = event.getY();
                    wallpath = new Path();
                    wallpath.moveTo(endPoint.x,endPoint.y);
                    break;
                case MotionEvent.ACTION_MOVE:
                    PointF point = new PointF(event.getX(),event.getY());
                    endPoint.x = event.getX();
                    endPoint.y = event.getY();
                invalidate();
                    break;
                case MotionEvent.ACTION_UP:

                    endPoint.x = startPoint.x;//event.getX();
                     isFinished = true;                    
                    break;
                default:
                    break;
            }

    @Override
    protected void onDraw(Canvas canvas)
    {
        wallpath.lineTo(endPoint.x, endPoint.y);
            canvas.drawPath(wallpath, paint);

       if(isFinished)
        {
            wallpath.lineTo(endPoint.x, endPoint.y);
            canvas.drawPath(wallpath, paint);
        }
    }

在每次新触摸时,我都在创建一条新路径。但是当绘制新路径时,旧路径将被删除。如何在 Canvas 上绘制多条路径,每条路径填充颜色不同。

最佳答案

当 ACTION_DOWN 是触发事件时,您将使用 wallpath = new Path() 语句重置 wallpath,放弃之前的值。这条新路径是 onDraw 方法中唯一绘制的内容,每次需要重绘 Canvas 时都会调用该方法。

考虑构建路径列表,当触发事件 ACTION_DOWN 时向列表添加新路径,并在 onDraw 方法中绘制列表中的每条路径。

详细信息:

在代码的其他地方,添加:

pathList = new ArrayList<Path>;

在 ACTION_DOWN 情况下,添加一行:

wallpath = new Path();
pathList.add(wallpath); // <-- Add this line.

在 ACTION_MOVE 情况下:

endPoint.x = event.getX();
endPoint.y = event.getY();
wallpath.lineTo(endPoint.x, endPoint.y); // <-- Add this line.

最后,将 onDraw 方法中的代码替换为以下代码:

for (Path path : pathList) {
    canvas.drawPath(path, paint);
}

删除条件,这是不必要的。

关于java - 在android中绘制多条路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592169/

相关文章:

java - 如何打开和关闭fragment,点击android中的同一个按钮

Android:在 ImageView(或任何其他位图兼容小部件)上绘制一个可移动且可调整大小的矩形并裁剪所选区域

android - drawLines 方法在缩放的 Canvas 上产生奇怪的效果

java - 没有注释的 ArangoDB Java 驱动程序边缘

java - java EE6 JSF 表示层和逻辑层如何协同工作?

java - 我无法在Apache Tomcat中使用Gson反序列化Json

java - 彼此相邻的两个矩形不起作用 (Java)

java - 具有前瞻功能的正则表达式性能/速度较差

android - 可扩展布局与 recyclerview android

android - 如何获得专辑封面? ALBUM_ART 列索引为 -1