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 внутри него. Это будет работать.