如何从数据库中存储的坐标在画布上的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;
}
这里我从数据库到stringbuffer&amp;将其转换为String数组,以便不同的路径可以存储在不同的记录中。
我的桌子是......
X-cordinatrs TEXT, Y-cordinatrs TEXT, Path_id INTEGER, PAGE_NO INTEGER
答案 0 :(得分:1)
不确定这是否会有所帮助,但请您移动代码
在执行
之前实例化路径Path mPath1 = new Path();
do{ }
以及
在while:
之后将drawPath方法移到外面while();
mCanvas.drawPath(mPath1, mPaint);
希望它有所帮助。您可能还想查看此link
答案 1 :(得分: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循环,只需用你的代码替换它。 它会像你想要的那样工作........