You can try to do it without AnimationDrawable
using Handler.postDelayed
. Something like this:
final ImageView image = (ImageView) findViewById(R.id.SplashImageView);
final Handler handler = new Handler();
final Runnable animation = new Runnable() {
private static final int MAX = 120;
private static final int DELAY = 50;
private int current = 0;
@Override
public void run() {
final Resources resources = getResources();
final int id = resources.getIdentifier("l" + current, "drawable", getPackageName());
final Drawable drawable = resources.getDrawable(id);
image.setBackgroundDrawable(drawable);
handler.postDelayed(this, DELAY);
current = (current + 1) % MAX;
}
};
handler.post(animation);
This solution requires less memory because it keeps only one drawable at the time.
You can cancel the animation using handler.removeCallbacks(animation);
.
If you want make a one-shot animation you can call handler.postDelayed
conditionally:
if (current != MAX - 1) {
handler.postDelayed(this, DELAY);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…