Я использую библиотеку Koral: https://github.com/koral--/android-gif-drawable для отображения Gif анимированного персонажа для моего приложения. Цель состоит в том, чтобы заставить персонажа анимировать случайным образом, в настоящее время 3 позы после тика Timer. Про Таймер я последовал за Дейвом. B совет через: Таймер Android? Как? чтобы активировать настройку GifImageResource.
Я прогуглил некоторый код об очистке кеша, но ничего не изменилось. Я также попробовал более популярную библиотеку ImageView - Glide V4, но кажется, что библиотека Koral имеет лучшую производительность при отображении Gif.
// My Timer Code
// runs without a timer by reposting this handler at the end of the runnable
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
// Clear RAM cache to maintain speed
// AppUtils.deleteCache(getApplicationContext());
// Random Character State
int imageArr[] = new int[3];
imageArr[0] = R.drawable.dancing;
imageArr[1] = R.drawable.idle;
imageArr[2] = R.drawable.waving4;
//(load your array here with the resource ids)
final int min = 0;
final int max = 2;
final int random = new Random().nextInt((max - min) + 1) + min;
Toast.makeText(getApplicationContext(), "Timer Ticked: " + random, Toast.LENGTH_SHORT).show();
character.setImageResource(imageArr[random]);
timerHandler.postDelayed(this, 5000);
}
};
// Main program
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idle = true;
character = findViewById(R.id.character); // GifImageView of my character
character.setImageResource(R.drawable.idle);
// Timer
if (idle == true)
{
timerHandler.postDelayed(timerRunnable, 0);
}
else
{
timerHandler.removeCallbacks(timerRunnable);
}
}
Она работает без каких-либо ошибок, но начинает работать очень медленно после 20-30 триггеров. Я не знаю, из-за того, что мой планшет слишком слабый или мой код не оптимизирован.
Спасибо!