立即跟随您的手指的位图

时间:2014-02-11 16:02:15

标签: java android position motionevent instant

我想要一个位图跟随我的手指。但是当我使用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);
}

3 个答案:

答案 0 :(得分:0)

您必须对onTouch方法执行一些不必要的工作。因为如果你只改变它的位置,它不应该是滞后的。

编辑: 您可以保存Rect m_Src和m_Dst,只需更改渲染中的坐标即可。 这将为系统和垃圾收集节省大量工作。

答案 1 :(得分: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执行任何缩放/翻译,并且应该更有效。

答案 2 :(得分:0)

我的猜测是每次绘图时“onTouch”处理程序都会中断......

你的“onDraw”例程应该位于正确的线程中(也许ASyncTask也可以完成这项工作)。然后,您必须将手指的x,y坐标转发到gui线程。

在google中输入“Thread Gui Android”作为综合示例:)