2014-02-11 66 views
0

我想要一個位圖跟隨我的手指。但是當我使用MotionEvent.ACTION_MOVE時,位圖滯後。有沒有一種方法可以立即(或幾乎立即)將您的手指放在位圖上?立即跟隨你的手指的位圖

public boolean onTouch(View v, MotionEvent me) 
{ 
    // TODO Auto-generated method stub 
    switch(me.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
     if(me.getX() > player.get_RectXPos() && me.getX() < player.get_RectXPos() + player.get_Width() && 
      me.getY() > player.get_RectYPos() && me.getY() < player.get_RectYPos() + player.get_Height()) 
     { 
      isDown = true; 
     } 
     break; 
    case MotionEvent.ACTION_UP: 
     isDown = false; 
     break; 
    case MotionEvent.ACTION_MOVE: 
     if(isDown == true) 
     { 
      player.set_xPos(me.getX()); 
      player.set_yPos(me.getY()); 
     } 

     break; 
    } 
    return true; 
} 

我想你問的這個部分:

void render(Canvas canvas) 
{ 
    m_Src = new Rect(0, 0, m_RectWidth, m_RectHeight); 
    m_Dst = new Rect(m_RectX, m_RectY, m_RectX + m_RectWidth, m_RectY + m_RectHeight); 
    canvas.drawBitmap(m_Bitmap, m_Src, m_Dst, null); 
} 
+0

你可以發佈你的代碼嗎? – Niko

+0

好的,我編輯了它 – user3297952

+0

你還可以發佈繪製位圖的功能嗎? – Niko

回答

0
void render(Canvas canvas) 
{ 
m_Src = new Rect(0, 0, m_RectWidth, m_RectHeight); 
m_Dst = new Rect(m_RectX, m_RectY, m_RectX + m_RectWidth, m_RectY + m_RectHeight); 
canvas.drawBitmap(m_Bitmap, m_Src, m_Dst, null); 
} 

這裏您每次分配2個Rect對象。您只應初始化它們一次,並使用Rect.set來更改它們的值。

此外,如果您的Bitmap大小不應更改,您可以使用public void drawBitmap (Bitmap bitmap, float left, float top, Paint paint),因爲此方法不會對Bitmap執行任何縮放/轉換,並且應該更高效。

0

,您必須對您的onTouch方法中的一些不必要的工作。因爲如果你只改變它的位置,它不應該是滯後的。

編輯: 您可以保存您的Rect m_Src和m_Dst,只需在渲染中更改其座標。 這將爲系統和垃圾收集節省很多工作。

+0

這不是一個真正的答案,你可以用OP – Niko

+0

來評論這個問題。這是真的..我有點新在這裏不知道sry – Arnaud

+1

好吧,你不能學習,如果你不嘗試! :) – Niko

0

我的猜測是,「onTouch」處理程序,每次中斷圖紙...

你「的onDraw」常規應位於其正確的線程(可能的AsyncTask可以做的工作太)。然後,您需要將手指的x,y座標轉發到gui線程。

在谷歌中鍵入「Thread Gui Android」的全面例子:)

相關問題