Gif отображается медленно при срабатывании по таймеру - PullRequest
0 голосов
/ 08 октября 2019

Я использую библиотеку 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 триггеров. Я не знаю, из-за того, что мой планшет слишком слабый или мой код не оптимизирован.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...