Проблемы с производительностью Android при просмотре анимации (скольжение в / из) - PullRequest
0 голосов
/ 07 марта 2011

У меня есть вкладка полноэкранного просмотра на вкладке галактики, содержащая две относительные раскладки, каждая из которых отображает от пяти до десяти просмотров изображений.

У меня возникают проблемы, когда я пытаюсь вставить один из view flipper viewso ut, а другой в «анимация» ничего не делает, а затем просто переключается.

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

Могу ли я как-то заставить его использовать смешанную версию изображения для анимации, или контейнер относительной компоновки вызывает проблему с производительностью?

Во время анимации флиппера ничего не должно происходить, поэтому я не могу понять проблему.

Спасибо

РЕДАКТИРОВАТЬ: Некоторые из проблемных кода: Возможно, это может указывать на области, вызывающие проблемы с производительностью?

У меня в onClick два вызова метода, которые используются для переключения назад в представления и вперед. Представление «генерируется» непосредственно перед добавлением в флиппер и переключением.

Итак, по нажатию кнопки «назад» (например) у меня (помимо прочего) ....

nextView = new RelativeLayout(this);
makeAView(selectedViewObjects, viewHolder2);
switchViewNow(-1);
currentView = nextView;
...


private void makeAView(ViewObjects vObjects, RelativeLayout nextView)
{
  for(Object obj :  vObjects.viewObjects)
  {
   if(obj instanceof Image)
  {
    addImageView(nextView, obj);
  {
  else
  {
   if(obj instanceof Anim)
  {
    addAnimView(nextView, obj);
  }
}

Где Image - это пользовательская реализация View для отображения статического изображения, а Anim - пользовательская реализация View для отображения AnimationDrawable (цикл многокадрового изображения).

Далее у нас есть метод переключения:

private void switchViewNow(int direction)
    {
        if(direction == -1)
        {
            viewFrame.setInAnimation(AnimClass.inFromLeftAnimation(null));
            viewFrame.setOutAnimation(AnimClass.outToRightAnimation(null));
            viewFrame.showNext();
        }
        else
        if(direction == 1)
        {
            viewFrame.setInAnimation(AnimClass.inFromRightAnimation(null));
            viewFrame.setOutAnimation(AnimClass.outToLeftAnimation(null));
            viewFrame.showNext();
        }
    }

1 Ответ

1 голос
/ 11 февраля 2012

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

Он определен вне makeAView, но makeAView ожидает параметр, который он называет nextView.

Вы передаете viewHolder2 как nextView этой функции.

Это означает, что makeAView НЕ изменит «глобальный» nextView, он изменит viewHolder2.

Но тогда вы, кажется, предполагаете, что «глобальный» nextView был изменен, потому что вы используете его для назначения currentView.

Я думаю, что было бы неплохо начать, если вы назначите уникальные имена этим двум версиям nextView.

Интересно, вы все еще ищете решение: этот пост довольно старый и игнорируется.

...