Android onDraw loop

Я установил глобальные переменные x, y в классе Activity.

Я запускаю поток "t0", который постоянно обновляет глобалы x и y.

У меня есть onDraw псевдокод следующим образом (все в потоке пользовательского интерфейса):-

View.onDraw(){
    if (x,y changed value) {
        x0=x;
        y0=y;
        loop (x0-- until x0==0){
            canvas.drawBitmap(bmp, x0, y0, bitmapPaint);
            invalidate();
        }
    }
}

Я надеялся, что увижу анимацию растрового изображения, перемещающегося по экрану по оси X, при котором каждый invalidate() перерисовывает новую позицию. Вместо этого я вижу, как он "перепрыгивает" на последнюю x позицию 0 (без промежуточных ступеней).

Я делаю предположение, что хотя x и y обновляются через t0, я не слишком обеспокоен, так как цикл занят исходными значениями x, y (присвоенными x0,y0).

Я наблюдаю за обновлением x, y, и код выполняется внутри цикла if (я вижу это с помощью отладки).

Я попытался добавить задержку, но, похоже, это не имело никакого значения. Я могу заставить его перерисовывать прямо в новую позицию x, y, но мне нужен плавный "переход" через цикл, чтобы происходить от одной координаты x0 к другой.

Любые советы или подсказки будут оценены.

Заранее спасибо.

Стив

2 ответа

Я думаю, что вы не можете вызвать onDraw в пределах onDraw, призвание invalidate() только причины, которые onDraw будет вызван после текущего onDraw отделки. Я не уверен, как вы на самом деле реализовали это, так как это псевдокод, но я думаю, что вы не хотите цикл в onDraw, но сделать что-то вроде этого:

View.onDraw(){
    if (x,y changed value) {
        x0=x;
        y0=y;
        if (x0!=0){
            x0--;
            canvas.drawBitmap(bmp, x0, y0, bitmapPaint);
            invalidate();
        }
    }
}

Я думаю, что то, что происходит здесь, это промежуточные звенья. Но не хватает времени, чтобы показать это. Вы должны установить некоторые thread.sleep внутри него. Это будет работать.

Другие вопросы по тегам