Drawable анимация требует фиксированного кадра анимации. Подумайте об этом, как флип-книга. Выбираемый должен быть весь размер вашего холста, и ваш спрайт должен быть предварительно обработан поверх прозрачного фона для достижения вашего эффекта. Это также потребует большого количества памяти текстур в зависимости от размера и количества кадров.
«Игровой цикл», как вы заявили, является тем, что Android уже предоставляет в некотором роде. Внутри стандартной настройки холста у вас есть «главная тема». Таким образом, с сущностью, подобной Handler
, вы можете пометить кадры, если хотите.
т.е.
Handler handler;
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
handler = new Handler();
handler.post(new Runnable() {
public void run() {
boolean isLastFrame = drawFrame();
if (!isLastFrame) {
handler.postDelayed(this, ONE_SECOND_MILLIS);
}
}
});
Это не самый большой на самом деле тоже.
Вы также можете инкапсулировать свой спрайт внутри View
или собственный пользовательский номер Drawable
и внутри вашего метода onDraw()
, вы бы обновили свой холст.
public void onDraw(Canvas canvas) {
// clear canvas
mPaint.setColor(Color.WHITE);
canvas.drawPaint(mPaint);
// Draw current
mPaint.setColor(Color.BLACK);
canvas.drawRect(rect, mPaint);
}
public void moveSprite() {
rect.offset(3, 3);
invalidate();
}
Вы могли бы также, при использовании View
, используйте ObjectAnimator
перевести взгляд из положения (x1, y1) и (x2, y2).
public void moveTo() {
if (!moveNeeded) {
return;
}
View view = getMyView();
view.animate().x(1).y(1).setListener(new Animator.AnimatorListener() {
public void onAnimationCancel(Animator a) { }
public void onAnimationStart(Animator a) {
}
public void onAnimationEnd(Animator a) {
moveTo();
}
public void onAnimationRepeat(Animator a) {
}
});
}
Я не думаю, что это настоящий вопрос. Я имею в виду, что может быть проблема. Их могло быть много. DrawableAnimation - это неэффективная память, особенно для больших кадров кадра, больших размеров. DrawableAnimation заботится о цикле, о котором вы говорите. –