0

我所拥有的是,当我单击并拖动我的位图时,它会跟随你的手指,但它实际上只能让我将它向右移动,如果我想的话,我也可以向左倾斜一点但除此之外,几乎不可能让这东西移动。我需要能够在各个方向移动它,你能帮我吗?这是我的代码:

@Override
    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        clear.setARGB(0, 0, 0, 0);
        AndroidDudeHitbox.set(AndroidX, AndroidY, AndroidX + AndroidDude.getWidth(), AndroidY + AndroidDude.getHeight());
        canvas.drawRect(AndroidDudeHitbox, clear);
        canvas.drawBitmap(AndroidDude, AndroidX - (AndroidDude.getWidth()/2), AndroidY - (AndroidDude.getHeight()/2), null);
        if (AndroidX > canvas.getWidth() || AndroidX < 0 || AndroidY > canvas.getHeight() || AndroidY < 0) {AndroidX = 30; AndroidY = canvas.getHeight()/2;} 
        invalidate();
    }
@Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        try {
            Thread.sleep(30);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if (AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY()))
        {
            switch (event.getAction())
            {
            case MotionEvent.ACTION_MOVE:
                AndroidX = (int) event.getX();
                AndroidY = (int) event.getY();
                break;
            }
        }

        return true;
    }

编辑:我刚刚发现我不能将位图直接向右移动。我可以直接向下和向右移动它。但没有其他的。

4

2 回答 2

0

您检查AndroidDudeHitbox 是否包含点(如果它被触摸),但您在其上绘制AndroidDude。要么去掉下面的 if 语句,要么在 AndroidDude 上绘制 hitbox。

if (AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())){

于 2012-06-02T15:59:59.730 回答
0

首先:不要在您的 onTouch 方法中进行“睡眠”调用。这是自找麻烦。

首先,暂时删除检查 AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY()) 的 if 语句。只需始终使用 event.getX() 和 event.getY() 更新 AndroidX 和 AndroidY。

最后,我认为最重要的是,在您更改 onTouch 中的 AndroidX 和/或 AndroidY 值后调用“ invalidate() ”。只有调用 'invalidate()' 会导致稍后再次调用 onDraw。

public boolean onTouch(View v, MotionEvent event) 
{
    if (true /*AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())*/)
    {
        switch (event.getAction())
        {
        case MotionEvent.ACTION_MOVE:
            AndroidX = (int) event.getX();
            AndroidY = (int) event.getY();
            invalidate(); // important!!!
            break;
        }
    }

    return true;
}

如果添加对“invalidate()”的调用有效,请再次添加您暂时删除的“if”语句,看看是否一切仍然有效。

于 2013-02-06T23:54:54.473 回答