2017-10-10 7 views
0

je le code suivant pour essayer de tourner un chemin:Android - Chemin ne tourne pas avec toile

//inside onDraw 
switch (orientation) { 
    case FACE_FRONT: 
     canvas.save(); 
     updatePath(); 
     canvas.rotate(0); 
     canvas.restore(); 
     break; 
    case FACE_RIGHT: 
     canvas.save(); 
     updatePath(); 
     canvas.rotate(90); 
     canvas.restore(); 
     break; 
    case FACE_REAR: 
     canvas.save(); 
     updatePath(); 
     canvas.rotate(180); 
     canvas.restore(); 
     break; 
    case FACE_LEFT: 
     canvas.save(); 
     updatePath(); 
     canvas.rotate(270); 
     canvas.restore(); 
     break; 
    } 

    canvas.drawPath(mPath, mPaint); 

public void updatePath() { 
    if (mPointArray.size() > 1) { 
     mPath.moveTo(mPointArray.get(0).x * scaleX, mPointArray.get(0).y * scaleX); 
     for (int x = 1; x < mPointArray.size(); x++) { 
      mPath.lineTo(mPointArray.get(x).x * scaleX, mPointArray.get(x).y * scaleX); 
     } 
    } 
    mPath.offset((centerX - (tmWidth/2)) * -scaleX, (centerY - (tmWidth/2)) * -scaleX); 
} 

Pour une raison inconnue, mon chemin ne tourne pas avec la toile. Quelqu'un pourrait-il me faire savoir ce que je fais mal.

J'ai essayé de chercher d'autres exemples, mais la plupart des exemples semblent être avec des bitmaps au lieu de chemins.

Répondre

0

Pourquoi appelez-vous restore()?

Supprimez tous les appels canvas.save() et canvas.restore() et tout ira bien.

donc votre code à l'intérieur onDraw() doit être quelque chose comme ceci:

updatePath(); 
    switch (orientation) { 
     case FACE_FRONT: 
      canvas.rotate(0); 
      break; 
     case FACE_RIGHT: 
      canvas.rotate(90); 
      break; 
     case FACE_REAR: 
      canvas.rotate(180); 
      break; 
     case FACE_LEFT: 
      canvas.rotate(270); 
      break; 
    } 
    canvas.drawPath(mPath, mPaint);