использование фабрики растровых изображений для отображения 150 изображений со скоростью 30 изображений в секунду внутри работоспособного, но он запаздывает - PullRequest
0 голосов
/ 05 июня 2019

У меня есть 150 изображений во внешнем хранилище устройства Android, которое я должен использовать в качестве анимации для активности со скоростью 30 изображений в секунду.

Я использовал растровое изображение для декодирования файла при заданномпуть, а затем установить его внутри imageView.Я использую обработчик, чтобы сделать это, но анимация довольно медленная.

В приведенном ниже коде animationReadyPath - это путь к папке, а imageList - это массив файлов внутри этой папки.Я использовал этот код внутри onWindowFocusChanged().

var i = 0
val interval = 1000/30       
val handler = Handler()
val runnable = Runnable {
    handler.postDelayed(runnable, interval.toLong())
    val imgFile = File(animationReadyPath+imageList[i])
    val myBitmap = BitmapFactory.decodeFile(imgFile.absolutePath)
    iv_animation_ready.setImageBitmap(myBitmap)

    if(i<numOfImg){
        i++
    }
    if(i>numOfImg){            
        iv_animation_ready.setImageBitmap(
            BitmapFactory.decodeFile(
                animationReadyPath+imageList[149]
            )
        )
    }
}
handler.postAtTime(runnable, System.currentTimeMillis()+interval)
handler.postDelayed(runnable, interval.toLong())

Анимация очень медленная.Как это исправить или предложить другие способы плавной загрузки анимации.

Я не могу включить изображения в свой проект, так как это увеличит размер моего проекта.

1 Ответ

0 голосов
/ 05 июня 2019

Вы должны загрузить все изображения перед их отображением.Для воспроизведения анимации вы можете использовать AnimationDrawable:

AnimationDrawable myAnim = new AnimationDrawable();

. И для каждого файла изображения вы можете использовать BitmapFactory, чтобы декодировать его в растровое изображение и поместить этот растровое изображение в BitmapDrawable. * 1006.*

Затем вы можете добавить этот BitmapDrawable к вашей анимации:

myAnim.addFrame(myBitmap, 1000/30)

Затем вы можете использовать AnimationDrawable в любое время и запустить анимацию с myAnim.start().

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