Android слайд анимация - PullRequest
       36

Android слайд анимация

5 голосов
/ 02 ноября 2011

У меня есть панель инструментов, выровненная внизу и WebView над ней, которые заполняют оставшуюся высоту. Теперь я хочу сдвинуть панель инструментов, чтобы скрыть ее, и пока она анимируется, высота веб-просмотра должна увеличиться. Я пытался использовать TranslateAnimation, но, к сожалению, он не регулирует реальное положение панели инструментов, только перемещается его содержимое. Вот что я попробовал:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%"
    android:toXDelta="0%"
    android:fromYDelta="0%"
    android:toYDelta="100%"
    android:duration="700"
    android:fillAfter="true" />

И фактический код:

final View v = findViewById(R.id.browseToolbar);
Animation animation = AnimationUtils.loadAnimation(someContext, R.anim.toolbar_hide);
v.startAnimation(animation);

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Я написал некоторый код для анимации реального изменения размера. Взгляните:

http://www.touchlab.co/blog/resize-animation/

Также посмотрите презентацию, которую я сделал на Android-анимации

https://docs.google.com/present/view?id=djqv5kb_187c62jvbf7

По сути, как уже упоминалось выше, обычные классы анимации влияют только на то, что находится в их родительском представлении. Ключ к их пониманию в том, что они не «настоящие». Думайте об Android-анимации как о мираже. Если вы запустите пример приложения, которое я создал, скажем, вы сделаете масштабную анимацию и сделаете кнопку меньше, если вы щелкнете снаружи, где находится кнопка USED, она все равно будет регистрироваться как нажатие кнопки. Android-анимация фактически не влияет на реальные границы и размеры.

То, что код в моем сообщении в блоге, по сути, реализует ViewGroup.OnHierarchyChangeListener. Когда материал добавляется / удаляется из иерархии, контейнер анимирует физическое изменение размера.

0 голосов
/ 02 ноября 2011

При использовании Android-анимации смещаются только пиксели вида. Чтобы на самом деле переместить представление, вам нужно добавить слушатель анимации к объекту анимации и переопределить метод onAnimationEnd. В этом методе вам нужно программно перемещать представление.

 AnimationListener animListener = new AnimationListener() {
     @Override
     public void onAnimationStart(Animation arg0) {}            
     @Override
     public void onAnimationRepeat(Animation arg0) {}                   
     @Override
     public void onAnimationEnd(Animation arg0) {
        Move the view here          
     }
 };

 animation.setAnimationListener(animListener);
...