2013-02-13 73 views
1

我想將位圖從X,Y移動到新的X',Y'併爲其設置動畫。我有一個SurfaceView作爲Activity的內部類,並且SurfaceView作爲線程運行並處理畫布上的所有圖形。如何移動位圖併爲其設置動畫效果

這裏是線程的run方法:

public void run() 
    { 
     while(threadOk == true) 
     { 
      if(!holder.getSurface().isValid()) 
       continue; 

      Canvas canvas = null; 
      try 
      { 
       canvas = holder.lockCanvas(); 
       letsDraw(canvas); 
      } 
      finally 
      { 

       if (canvas != null) 
       { 
        holder.unlockCanvasAndPost(canvas); 
       } 
      } 
     } 
    } 

這裏是letsDraw(Canvas canvas)方法:

public void letsDraw(Canvas canvas) 
    { 
     canvas.drawARGB(255, 0, 102, 0); 
     canvas.drawBitmap(card.getPic(), card.getX(), card.getY(), null); 
    } 

card是一個自定義類Card(Bitmap pic, float X, float Y)的一個實例。 事情是,我知道如何處理這種情況。我想將位圖「轉移」幾個像素,並在此過程中對其進行動畫處理。

回答

1

你這樣做是錯的。

Here是你應該做的一個例子。

基本上要「移動」(動畫)要更新x和y座標的圖像並重繪視圖。這可以通過在您的平局通話結束時簡單地撥打invalidate()來完成。

+0

我一直在瀏覽YouTube上的一些教程,並讓他們說這是正確的方法,因爲在視圖中作爲一個單獨的線程運行。所以你說我不應該把它作爲一個線程運行? – Kajzer 2013-02-13 11:33:25

+1

不,你在'letsDraw()'中調用了一個不需要的方法。已經有預製的方法可供您使用。但在你的情況下,如果你不想改變任何東西,你可以簡單地在繪圖調用結束時調用'invalidate()'。 – Synaero 2013-02-13 11:39:34

0

我認爲實現這一目標的唯一方法是使用LinearInterpolator計算位圖的X和Y位置並將其繪製在「letsDraw」方法上。

相關問題