2015-01-27 3 views
2

Я пытаюсь воспроизвести анимацию, которая возникает, когда мы открываем меню переполнения браузера Chrome для Android. Вот видео для этой анимацииАнимация для Popupwindow

https://www.dropbox.com/s/1f4i1ad9ky1wjth/video.flv?dl=0

Так анимировать загрузку элементов в ListView в этом окне, я использую следующий код в GetView() адаптера этого ListView.

<set> 
    <translate android:fromYDelta="-5%p" android:toYDelta="0" 
     android:duration="700"/> 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
     android:duration="700" /> 
</set> 

Но этот эффект отличается от оригинальной Chrome Animation? Что мне здесь не хватает?

ответ

2

Действительное вещь происходит здесь с элементами ListView являются

  1. Они переводят на android:fromYDelta="-1%p" to android:toYDelta="0"
  2. Их значение альфа меняется android:fromAlpha="0.0" android:toAlpha="1.0"
  3. И самое главное, загрузку элементов в ListView была отложена с использованием

    LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(MainActivity.this, R.anim.animation), 0.3f);

где 0.3f - задержка.

У меня отсутствовал третий пункт. И здесь R.anim.animation - это анимация, объединяющая точки 1 и 2. Вот полный проект. Просто тень отсутствует устройства Pre-Lollipop

https://github.com/rahulrj/ChromeOverflowMenu

1

Если вы установите для параметра «Масштаб анимации» значение «10x» в параметры разработчика, вы увидите, что элементы в списке меню анимируются последовательно ... Не в одно и то же время.

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

EDIT 1:

Вы можете анимировать с помощью Java-код с помощью setStartDelay в управляйте стартовой задержкой на каждом представлении, используя позицию в качестве управляющей переменной (startDelay = position * 1000, если вы хотите 1 секунду между каждым пунктом).

+0

Да, мой код загружает их одновременно. Я хочу, чтобы они загружались последовательно. Как мне это сделать? – Diffy

+0

@ Diffy Я отредактировал, чтобы добавить возможный способ сделать это. –

+1

Вы намекали на масштаб анимации Аниматора. Я попробовал это, замедляя анимацию, и это привело меня к LayoutAnimationController, который работал для меня. Спасибо вам за помощь. – Diffy

-1

Эй проверить это: ListView Animations

Может быть, это может быть полезным для вас. Я не проверить свой код, но я предполагаю, что это может работать для вас:

<set> 
<translate android:fromYDelta="-50%p" android:toYDelta="0" 
    android:duration="700"/> 
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
    android:duration="700" /> 

+0

Я опубликовал то же самое в своем коде. – Diffy

+0

Да. Я изменил только значение YDelta. –

+0

Нет. Это не работает – Diffy

1

Две вещи происходят во время анимации:

1) контейнер (который содержит элементы, в вашем случае listview) масштабируется от 0 до 1, важно, чтобы вы предоставили правильную точку опоры, иначе анимация не будет похожа на хромированную анимацию.

2) Элементы, которые они сами оживляют, они исчезают. Вы можете сделать это с помощью простого объектного аниматора или анимации XML. Я бы пошел с аниматором Object, потому что тогда у вас больше контроля. Как сказал кто-то другой, вы можете добавить setStartDelay на основе позиции, но это может вызвать странное поведение при прокрутке списка.

Замечания: Возможно, библиотеки для анимации ListView я бы рекомендовал вам взглянуть на них. Вы можете найти много альбомов для Android на https://android-arsenal.com/

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

+0

Я смотрел анимацию и пытался из последних 2 дней. Затем я отправил вопрос. BTW, я не знал об аниматорской продолжительности, что помогло мне много узнать об анимации. Поэтому я попробовал это, что привело меня к решению. – Diffy

Смежные вопросы