【问题标题】:how to draw a path in android on canvas如何在画布上的android中绘制路径
【发布时间】:2012-03-16 05:49:21
【问题描述】:

如何根据数据库中存储的坐标在画布上的 android 中绘制路径..

我曾尝试过手指画,但是当我获取坐标时 从数据库中,它从不同的位置绘制一条路径,如果我放了一个点来绘制它,它会从最后一张画到这个点画一条线..

以下是从数据库中读取坐标的代码......

public Cursor read() {
    Cursor cur = db.query("path_new", null, null, null, null, null, null);
    StringBuffer sbx_read, sby_read;

    cur.moveToFirst();
    float x1 = 0, y1 = 0;
    int pid_read = 1;
    int cur_pid;
    float mX1 = 0, mY1 = 0;
    do {

        sbx_read = new StringBuffer();
        sbx_read.append(cur.getString(0));
        sby_read = new StringBuffer();
        sby_read.append(cur.getString(1));
        cur.moveToNext();
        Log.d("X", sbx_read.toString());
        Log.d("Y", sby_read.toString());
        Path mPath1 = new Path();

        String[] sbx_read_array = sbx_read.toString().trim().split(",");
        String[] sby_read_array = sby_read.toString().trim().split(",");
        // mPath.moveTo(x1, y1);
        for (int i = 0; i < sbx_read_array.length; i++) {

            x1 = Float.parseFloat(sbx_read_array[i].toString());
            y1 = Float.parseFloat(sby_read_array[i].toString());

            mPath1.moveTo(x1, y1);
            // mPath.reset();

            // mX1 = x1;
            // mY1 = y1;

            float dx = Math.abs(x1 - mX1);
            float dy = Math.abs(y1 - mY1);
            if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
                mPath.reset();
                mPath1.quadTo(mX1, mY1, (x1 + mX1) / 2, (y1 + mY1) / 2);
                mX1 = x1;
                mY1 = y1;
                // Log.d("X1", String.valueOf(x1));
                // Log.d("mX1", String.valueOf(mX1));
                // Log.d("Y1", String.valueOf(y1));
                // Log.d("mY1", String.valueOf(mY1));

                mPath1.lineTo(mX1, mY1);
                mCanvas.drawPath(mPath1, mPaint);

            }
        }
    } while (cur.moveToNext());
    cur.close();
    return cur;
}

在这里,我将路径从数据库获取到字符串缓冲区并将其转换为字符串数组,以便不同的路径可以存储在不同的记录中..

我的桌子是……

X-cordinatrs TEXT, Y-cordinatrs TEXT, Path_id INTEGER, PAGE_NO INTEGER

【问题讨论】:

  • 我不知道答案,但你检查过api演示中的手指画吗??
  • 是的,我已经检查过它显示如何用手指或笔绘制..它没有显示如何从从数据库获取的坐标中绘制路径......

标签: android drag-and-drop textview


【解决方案1】:

这就是答案..

    do {

        sbx_read = new StringBuffer();
        sbx_read.append(cur.getString(0));
        sby_read = new StringBuffer();
        sby_read.append(cur.getString(1));

        String[] sbx_read_array = sbx_read.toString().trim().split(",");
        String[] sby_read_array = sby_read.toString().trim().split(",");

        for (int i = 0; i < sbx_read_array.length; i++) {

            x1 = Float.parseFloat(sbx_read_array[i].toString());
            y1 = Float.parseFloat(sby_read_array[i].toString());

            if (pid != cur.getInt(2)) {
                pid = cur.getInt(2);
                mPath1.reset();
                mPath1.moveTo(x1, y1);
            }
            mPath1.lineTo(x1, y1);
            mCanvas.drawPath(mPath1, mPaint);
        }
    } while (cur.moveToNext());
    cur.close();

这是 Do..While 你的代码循环只是用你的代码替换它.. 它会按你的意愿工作........

【讨论】:

    【解决方案2】:

    不确定这是否会有所帮助,但请您移动代码

    在做之前实例化路径

    Path mPath1 = new Path(); 
    do{ }
    

    还有

    将drawPath方法移到while之后:

    while();
    mCanvas.drawPath(mPath1, mPaint);
    

    希望对您有所帮助。您可能还想看看这个link

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2014-10-01
      • 2012-08-15
      • 2021-06-25
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多