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

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

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

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

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

Благодарность

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

У меня есть в моем 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();
        }
    }
0
Hamid 7 Мар 2011 в 00:09
Раньше я успешно использовал ViewFlippers с скользящей анимацией и довольно сложными макетами на вкладке галактики. Я совершенно уверен, что даже использовал RelativeLayouts в этих представлениях. У меня не было проблем с анимацией. Я думаю, вам следует попробовать опубликовать некоторые части проблемного кода.
 – 
Zsombor Erdődy-Nagy
7 Мар 2011 в 04:49
Спасибо, я разместил часть проблемного кода по запросу.
 – 
Hamid
7 Мар 2011 в 11:48

1 ответ

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

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

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

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

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

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

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

1
Dave Lowerre 11 Фев 2012 в 01:13
Спасибо за ответ, но это было больше года назад, на другой работе, когда я впервые начал разработку Android, много изменений за год, и я больше там не работаю, поэтому я даже не могу проверить, что я сделал, чтобы изменить его, чтобы закрыть этот вопрос.
 – 
Hamid
22 Фев 2012 в 21:33