2017-10-10 3 views
0

와 함께 회전하지 I 경로를 회전 시도하는 다음 코드가 내 경로는 캔버스와 함께 회전되지 않고 알 수없는 이유로안드로이드 - 경로 캔버스

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

합니다. 누구든지 내가 뭘 잘못하고 있는지 알려 줄 수 있니?

다른 예제를 찾아 보았지만 대부분의 예제는 경로 대신 비트 맵을 사용하는 것 같습니다.

답변

0

왜 restore()를 호출합니까?

모든 canvas.save() 및 canvas.restore() 호출을 제거하면 문제가되지 않습니다.

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

그래서의 onDraw() 내부의 코드는 다음과 같이해야한다