Правильный выбор реализации для переключения более 20 различных экранов

Я делаю игру, похожую на викторину, в которой пользователь отвечает на каждый вопрос, прежде чем ему разрешат перейти к следующему.

Характеристики моего приложения:

  • Каждая сессия будет состоять из 10-30 экранов.
  • В целом экраны неоднородны по структуре компоновки, но их можно разделить на 5-6 типов.
  • Ожидаемое время, в течение которого пользователь взаимодействует с каждым экраном, составляет 10–30 секунд.
  • Как только пользователь переходит на следующий экран, предыдущий больше не нужен (он никогда не возвращается)
  • Я хочу иметь красивую скользящую анимацию перехода при переходе от одного экрана к другому.

Реализации, которые я рассматриваю:

  1. Начните новый Activity для каждого экрана в стиле «переадресация», т. е. запустите следующий экран, а затем завершите текущий.
  2. Загрузите все представления заранее и используйте ViewAnimator

Похоже, ни одно из моих текущих решений не является хорошим. Можете ли вы помочь мне с решением, которое хорошо с точки зрения потребления памяти, потребления батареи и отклика?

Большое Вам спасибо.


person Phil    schedule 16.05.2011    source источник
comment
В чем проблема с ViewAnimator?   -  person PravinCG    schedule 16.05.2011
comment
Как получить анимацию, когда, скажем, я повторно использую один и тот же вид и меняю содержимое? Если я не буду повторно использовать экраны, потребление памяти может быть слишком большим. Возможно, мне придется держать более 20 экранов.   -  person Phil    schedule 17.05.2011


Ответы (1)


ОК, ниже то, что я сделал. Оказалось я вручную поставил анимацию

onCreate() {
    mAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_in_right);
    mViewPool = new View[] { /* A few views for re-using, each of different type */ };
}

proceed() {
    nextView = getView(type);
    mFrame.removeAllChilds();
    mFrame.addView(nextView);
    nextView.startAnimation(mAnimation);
}

getView(int type) {
    View view = mViewPool[type];
    // reset some subviews if neccessary
    return view;
}

Где mFrame — это любая ViewGroup, которую вы считаете подходящей, а не обязательно ViewAnimator. Мой оказывается ScrollView.

Если вы видите какие-либо потенциальные проблемы с этим подходом, пожалуйста, дайте мне знать. Большое спасибо.

person Phil    schedule 17.05.2011