Хранение анимации в статическом поле - PullRequest
1 голос
/ 18 июня 2011

Я ищу способы ускорить несколько анимаций.

Я сталкивался с этой статьей , в которой мимоходом упоминается, что сохранение большого растрового изображения в статическом поле может помочь со временем загрузки приложения (см. Параграф 4).

Каким будет эквивалентный метод для AnimationDrawable?

Можно ли даже предварительно загрузить кадры в анимации, которую можно нарисовать? Они предварительно загружены по умолчанию? Поможет ли это мне ускорить процесс?

Я запускаю анимацию кадров, которая состоит из .png размером 256x256, они уменьшаются до размера изображения, которое, как я предполагаю, составляет около 100x100, это изменится, когда приложение будет использоваться на устройство с размером экрана, отличным от моего, но размер этого изображения 100x100 не изменится после вызова метода onCreate моего приложения.

Решение: Я изменил принятое решение следующим образом, чтобы я мог использовать стандартный формат анимации, который использует Android (и что у меня уже были закодированы мои анимации):

public Bitmap[] setAnimationArray(int res_anim){
        this.my_view.setBackgroundResource(res_anim); //view sized properly elsewhere
        AnimationDrawable t_anim = (AnimationDrawable) this.my_view.getBackground();
        Bitmap[] anim = new Bitmap[t_anim.getNumberOfFrames()];
        for(int i = 0;i<t_anim.getNumberOfFrames();i++){
            anim[i]=((BitmapDrawable) t_anim.getFrame(i)).getBitmap(); //extract bitmaps from the animation
        }
    return anim;

Редактировать: к ответу ниже я хотел бы добавить, что выполнение анимации в виде поверхности вручную кажется намного быстрее, чем анимация с использованием стандартных методов. Поиск Android SurfaceView для получения дополнительной информации.

1 Ответ

0 голосов
/ 19 июня 2011

Определите ваши растровые изображения в arrays.xml следующим образом:

    <array name="targetFrames">
        <item>@drawable/bitmap1</item>
        <item>@drawable/bitmap2</item>
        ...
   </array>

Вы можете сделать что-то вроде этого, чтобы создать массив растровых изображений:

private void setupTargetFrames() {
        TypedArray targetResources = context.getResources().obtainTypedArray(R.array.targetFrames);
        targetFrames = new Bitmap[targetResources.length()];

        for (int i = 0; i < targetResources.length(); i++) {
            targetFrames[i] = BitmapFactory.decodeResource(context.getResources(), targetResources.getResourceId(i, R.drawable.defaulBitmap));
        }

        targetResources.recycle();
    }

Затем воспроизведите анимацию, перебирая растровые изображения.

См. Другие методы BitmapFactory, если вы хотите масштабировать растровое изображение при загрузке.

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