【问题标题】:Save path to reuse on canvas保存路径以在画布上重复使用
【发布时间】:2017-08-04 18:51:37
【问题描述】:

我在画布上工作。我允许这样绘制路径:

// when ACTION_DOWN start touch according to the x,y values
    private void startTouch(float x, float y) {
        trazo.moveTo(x, y);
        mX = x;
        mY = y;
    }

    // when ACTION_MOVE move touch according to the x,y values
    private void moveTouch(float x, float y) {
        float dx = Math.abs(x - mX);
        float dy = Math.abs(y - mY);
        if (dx >= TOLERANCE || dy >= TOLERANCE) {
            trazo.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
            mX = x;
            mY = y;
        }
    }

    // when ACTION_UP stop touch
    private void upTouch() {
        trazo.lineTo(mX, mY);
        mCircles.add(new Trazo(trazo, colorActual, pincel));
        trazo = new Path();
    }

我想将这个“trazo”保存在本地数据库中,以便以后在画布上重复使用。 我怎样才能保存它?我认为如果保存第一个点(x,y)和第二个点(x,y),它只会在两点之间画一条线。我需要保存所有路径。 我不想将画布另存为图像,因为我想稍后重用它并允许修改它。

【问题讨论】:

  • 跟踪每条路径并添加每条路径的create json并在sqlite数据库中将其全部保存为一行。
  • 我会尝试用 gson 来做。如果这不起作用,我会和你一起尝试说

标签: android canvas path


【解决方案1】:

最后我保存了一个点数组列表,然后我迭代这个列表来构造路径。

【讨论】:

  • 你能举个例子吗? @garciam202
【解决方案2】:

您可以使用 google Gson 将您的 trazo 对象编组为 json。
Gradle 依赖:

compile 'com.google.code.gson:gson:2.8.0'

用法:

Gson gson = new Gson();
String trazoJson = gson.toJson(trazo);

然后您可以将trazoJson 持久化到数据库,您可以轻松地将trazoJson 解组为trazo

Gson gson = new Gson();
Path trazo = gson.fromJson(trazoJson, Path.class);

【讨论】:

  • 这对我不起作用。 Json 不能很好地转换路径
【解决方案3】:

您可以尝试像在 svg 中一样将路径保存为字符串。 https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2021-06-25
    相关资源
    最近更新 更多