2017-02-21 45 views
2

Я следил за базовым учебным пособием о том, как начать анимацию в мобильном приложении, созданном с помощью Codename One.Codename One - Hide Animation для одиночного элемента удаляет все

https://www.codenameone.com/manual/animations.html

В то время как я получаю концепцию использования макета анимации и unlayout анимации на контейнерах, чтобы переместить вещи на место и из места, это, кажется, не работать должным образом для unlayout анимации.

Мысль нижеприведенного кода состоит в том, чтобы иметь список элементов, которые либо показаны, либо скрыты на основе некоторых результатов поиска (пример имеет только простые метки). Анимация на месте хорошо работает при использовании в одиночку, как показано в учебнике.

Но почему все полностью исчезает при вызове «animateUnlayoutAndWait()»?

Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS)); 

     Button button = new Button("Hide"); 
     hi.add(button); 

     for (int iter = 0; iter < 10; iter++) { 
      Label b = new Label("Label " + iter); 
      b.setWidth(button.getWidth()); 
      b.setHeight(button.getHeight()); 
      b.setY(-button.getHeight()); 
      hi.add(b); 
     } 

     button.addActionListener((e) -> { 

      // hide every second label on click 
      if (button.getText().equals("Hide")) { 
       button.setText("Show"); 
       for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) { 
        Component c = hi.getContentPane().getComponentAt(iter); 
        c.setHidden(false); 
       } 
       hi.getContentPane().animateUnlayoutAndWait(500, 0); 

      } 
      // show stuff again 
      else { 
       button.setText("Hide"); 
       for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) { 
        Component c = hi.getContentPane().getComponentAt(iter); 
        c.setHidden(true); 
       } 
       hi.getContentPane().animateLayoutAndWait(500); 
      } 
     }); 

     hi.show(); 

Спасибо и наилучшие пожелания

+0

Попробуйте изменить его на 'animateUnlayout()' и удалите часть 'AndWait'. – Diamond

ответ

1

Я заметили, что вы по ошибке мест setHidden() значения, то if часть должна верно в то время как else часть должна быть ложной. Также удалите AndWait из своей анимации.

Form hi = new Form("Layout Animations", new BoxLayout(BoxLayout.Y_AXIS)); 

Button button = new Button("Hide"); 
hi.add(button); 

for (int iter = 0; iter < 10; iter++) { 
    Label b = new Label("Label " + iter); 
    b.setWidth(button.getWidth()); 
    b.setHeight(button.getHeight()); 
    b.setY(-button.getHeight()); 
    hi.add(b); 
} 

button.addActionListener((e) -> { 

    // hide every second label on click 
    if (button.getText().equals("Hide")) { 
     button.setText("Show"); 
     for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) { 
      Component c = hi.getContentPane().getComponentAt(iter); 
      c.setHidden(true); //should be true here 
     } 
     hi.getContentPane().animateUnlayout(500, 255, null); //remove AndWait 

    } // show stuff again 
    else { 
     button.setText("Hide"); 
     for (int iter = 1; iter < hi.getContentPane().getComponentCount(); iter += 2) { 
      Component c = hi.getContentPane().getComponentAt(iter); 
      c.setHidden(false); //should be false here 
     } 
     hi.getContentPane().animateLayout(500); //remove AndWait 
    } 
}); 

hi.show(); 
0

Пара примечаний: - истина и ложь правильно. не обратили на это внимания, потому что в любом случае все исчезло в обоих случаях. - ожидаю ли я его до конца или нет, в данном случае это не имеет значения, поскольку я называю это только случаем и не повторно на нескольких элементах. - еще одна вещь, которую вы изменили, - это задание непрозрачности мигающей анимации от 0 до 255. Таким образом, все элементы остаются видимыми.

Это приводит меня к двум вопросам: 1. Почему в моей форме применяется неадаптивная анимация для всех элементов в моей форме, а не только для тех, чьи свойства были изменены (значения позиции)? При использовании

animateUnlayoutAndWait(500, 0); 

все исчезнет, ​​даже кнопка.

  1. с текущим решением от бриллианта, при вызове неаудированной анимации, отдельные элементы, которые должны исчезнуть, мгновенно исчезают, единственным элементом, являющимся анимацией, является метка 8, и это анимация INTO place , а не неуместно.