2012-10-27 71 views
2

在Android中,如何在SurfaceView上繪製旋轉/翻轉硬幣wrt用戶。使用動畫並在ImageView中顯示翻轉硬幣非常容易,但我需要在SurfaceView上使用相同的平滑度。有沒有什麼方法可以在ImageView中翻動動畫,然後在每個瞬間取出它的內容,然後在SurfaceView上連續繪製它?Android平滑地旋轉surfaceView相對於用戶

回答

2

您可以使用Matrix類來執行繪製位圖上的這些操作。

Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    Matrix needleTransMatrix = new Matrix(); 
    needleTransMatrix.postRotate(rotationAngle,needleImage.getWidth()/2,needleImage.getHeight()); 
    needleTransMatrix.postTranslate(centerX+METER_OFFSET-needleImage.getWidth()/2, centerY-needleImage.getHeight()); 

    Matrix dialTransMatrix = new Matrix(); 
    dialTransMatrix.postRotate(rotationAngle,dialImage.getWidth()/2,dialImage.getHeight()/2); 
    dialTransMatrix.postTranslate(METER_OFFSET,0); 

    canvas.drawBitmap(bgImage, METER_OFFSET, 0, paint); 
    canvas.drawBitmap(dialImage, dialTransMatrix, paint); 
    canvas.drawBitmap(needleImage, needleTransMatrix, paint); 

以下是引出線,對此,我是在談論

private class AnimationThread extends Thread{ 

    private boolean isRunning = true; 
    private int destinationNeedlePosition = NEEDLE_POSITION_ENQURIES; 

    public AnimationThread(int destinationNeedlePosition) { 
     this.destinationNeedlePosition = destinationNeedlePosition; 
    } 

    public void cancelAnimation(){ 
     isRunning = false; 
    } 

    @Override 
    public void run() { 

     int destinationAngle = destinationNeedlePosition *45; 

     while(isRunning && destinationAngle != rotationAngle){ 
      if(destinationAngle > rotationAngle) 
       rotationAngle++; 
      else 
       rotationAngle--; 
      postInvalidate(); 
      try { 
       sleep(10); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

} 
+0

燁我試圖使用矩陣可以使用在由scalling一次只得到一個瞬間..不會給你一個平滑的翻轉感覺! – pvn

+0

您需要創建一個可以從一個位置轉換到另一個位置並插入位置的線程。同樣的事情,我已經這樣做了旋轉米針。 –

+0

你爲什麼使用2個矩陣? – pvn