2014-02-11 54 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”的全面例子:)

相关问题