Вопрос по анимации макета Android

1

Я пытаюсь анимировать переход, но это не дает мне правильных результатов

У меня есть макет, который выглядит так:

  • LinearView Root
    • ScrollView Groups
      • LinearView
        • Tile1
        • Tile2
        • Tile3
    • ScrollView SubGroups
      • LinearView
        • Tile4
        • Tile5
        • плитка6
Ориентация

Root установлена ​​на горизонтальную, а обе Groups и SubGroups имеют ширину и высоту, заданные для родительской заливки.

Я хочу, чтобы анимация Groups переводилась влево из экрана, так что пока показывается только ~ 40 dp, а SubGroups - влево справа за Groups, так что только лента Groups и отображается 90% от SubGroups.

Возможно ли это? Спасибо за любую помощь!

Теги:
animation
android-layout

1 ответ

5
Лучший ответ

Я думаю, вы хотите сделать вот так:

TranslateAnimation animateGroups = new TranslateAnimation(0,widthScreen - 40 , 0 , 0);
animateGroups.setDuration(1200);
animateGroups.setFillAfter(true);

TranslateAnimation animateSubGroups = new TranslateAnimation(0,widthScreen - 10 , 0 , 0);
animateSubGroups.setDuration(1200);
animateSubGroups.setFillAfter(true);

scrollViewGroups.startAnimation(animateGroups);
scrollViewSubGroups.startAnimation(animateSubGroups);

Примечание. вы можете получить размер экрана с помощью класса DiplayMetrics и если вы хотите преобразовать пиксели в dp, обратитесь к this

ИЗМЕНИТЬ: Изменить место просмотра после окончания анимации  Чтобы сделать это, вы должны добавить слушателя в свою анимацию,

animateGroups.addAnimationListener(AnimationListener);

и переопределить метод следующим образом:

 @Override
 public void onAnimationEnd(Animation animation){
scrollViewGroups.setPadding(0, 0 , screenWidth-40 , 0 ) ;
//or you can set the Margin like this(i supposed that your scrollView is in a RelativeLayout 
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)scrollViewGroups.getLayoutParams();
params.setMargin(0, 0 , screenWidth-40 , 0);
scrollViewGroups.setLayoutParams(params);
}
  • 0
    Спасибо за анимацию! У меня есть 2 вопроса, хотя после запуска анимации первая группа (та, которая движется за пределы экрана) верна, но вторая группа (подгруппа) вообще не отображается? Что мне нужно сделать, чтобы установить видимость на true? Кроме того, после завершения анимации я заметил, что координаты клика не отражают перевод. Например, одна из моих кнопок может быть нажата, если щелкнуть там, где она была до воспроизведения анимации, а не в ее новом местоположении. Спасибо за дополнительную помощь, которую вы можете предоставить :)
  • 0
    Мы здесь, чтобы помочь ; Что касается анимации, это всего лишь эффект, и когда я устанавливаю значение true дляFillAfter, это означает, что представление остается на последней позиции после окончания анимации (это просто визуально, реальное место всех ваших представлений не изменится, поэтому если вы хотите изменить место вашего просмотра, см. мои правки
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню