触摸时图像移动太快

时间:2012-03-16 17:22:44

标签: android touch surfaceview

我正在尝试做一个简单的任务。我从屏幕的左上角开始有一个圆圈。当我触摸屏幕上的任何地方时,我希望圆圈慢慢移向并停在用户触摸的位置。我已经成功实现了这一点,但是圈子移动的速度太快了。我相信我需要尝试让我的run()线程休眠几毫秒,但我似乎无法成功地做到这一点。这会是什么解决方案?代码很简单,但我发布在下面以防万一,谢谢你的帮助!

Thread t = null;
    SurfaceHolder holder;
    boolean isItOK = false;

    public GameView(Context context)
    {
        super(context);
        // TODO Auto-generated constructor stub
        holder = getHolder();
    }

    public void run()
    {
        Display display = getWindowManager().getDefaultDisplay();
        int screenWidth = display.getWidth();
        int screenHeight = display.getHeight();
        int screenArrayWidth = screenWidth / 50;
        int screenArrayHeight = screenHeight / 30;
        int[][] mapArray = new int[50][30];

        while (isItOK)
        {
            if (!holder.getSurface().isValid())
            {
                continue;
            }
            c = holder.lockCanvas();
            c.drawARGB(255, 255, 0, 0);



            c.drawBitmap(ball, destinationX - (ball.getWidth() / 2),
                    destinationY - (ball.getHeight() / 2), null);


        }
    }


public boolean onTouch(View v, MotionEvent me)
{
    switch (me.getAction())
    {
    case MotionEvent.ACTION_DOWN:
    {
        while (((int)(me.getX()) != (int)(destinationX)) && ((int)(me.getY()) != (int)(destinationY)))
        {
            if (me.getX() > destinationX)
            {
                destinationX++;

            }

            if (me.getX() < destinationX)
            {
                destinationX--;

            }

            if (me.getY() > destinationY)
            {
                destinationY++;

            }

            if (me.getY() < destinationY)
            {
                destinationY--;

            }

        }
    }

1 个答案:

答案 0 :(得分:0)

好的,您遇到的问题是您没有考虑经过的时间。这也意味着动画将在不同设备上以不同的速度移动,并且在后台运行不同的事物。你需要做的是决定你希望圆圈移动每毫秒的像素数,然后按照从最后一帧开始经过的时间来修改移动距离。