2012-03-16 6 views
1

comment dessiner un chemin dans Android sur toile à partir des coordonnées stockées dans la base de données ..comment dessiner un chemin dans Android sur toile

j'avais essayé fingerpaint mais quand je suis lire les coordonnées de la base de données de son dessiner un chemin à partir d'un emplacement différent et si j'avais mis un seul point à dessiner, il dessine une ligne du dernier dessin à ce point ..

ce qui suit est le code pour lire les coordonnées de la base de données ....

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; 
} 

ici je reçois le chemin base de données en StringBuffer & convertir en tableau de chaînes de sorte que les différents chemins peuvent être stocker dans différents dossiers ..

ma table est ...

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

+0

Je ne connais pas la réponse mais avez-vous vérifié la peinture de doigt dans des démos d'api ?? – Farhan

+0

oui j'avais vérifié son montrer comment dessiner avec un doigt ou un stylo .. il ne montre pas comment dessiner le chemin à partir des coordonnées extraites de la base de données ...... – Wolverine

Répondre

1

voici la réponse ..

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(); 

c'est la boucle Do..While de votre code suffit de le remplacer par votre code .. cela fonctionnera comme vous voulez ........

+1

thenx .... @Azharahmed – Wolverine

1

Je ne sais pas si cela serait utile mais pouvez-vous S'il vous plaît déplacer le code

instancier le chemin avant faire

Path mPath1 = new Path(); 
do{ } 

et aussi

déplacer la méthode drawPath extérieur après tout:

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

espère qu'il helps.You pourrait aussi vouloir jeter un oeil à ce link

+0

désolé ne fonctionne toujours pas même problème ... !!! !! – Wolverine

Questions connexes