Подтвердить что ты не робот

Всплывающая анимация PopupWindow не работает

У меня есть хороший PopupWindow, который я хочу показать с анимацией. Я делаю это так:

popup.setAnimationStyle(R.anim.appear);
popup.showAtLocation(popupMenuLayout, gravity, offsetX, offsetY);

Затем я настроил прослушиватель для изменения анимации:

popup.setOnDismissListener(new PopupWindow.OnDismissListener(){
 @Override
 public void onDismiss(){
  popup.setAnimationStyle(R.anim.disappear);
 }      
}); 

Но, эй, это не сработает. Ни для res/anim/не отображается:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromYDelta="100%"
 android:toYDelta="0"
 android:duration="1000" 
/>

Не для res/anim/исчезают:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromYDelta="0"
 android:toYDelta="100%"
 android:duration="1000"
/>

Любые подсказки?

4b9b3361

Ответ 1

Собственно, PopupWindow.setAnimationStyle ожидает стиль с 2 записями. Вам нужно иметь два xmls, каждый из которых содержит <set>, один для показа, а другой - для скрытия окна. Когда это будет сделано, поместите следующий фрагмент в значения /styles.xml:

<style name="AnimationPopup">
    <item name="android:windowEnterAnimation">@anim/popup_show</item>
    <item name="android:windowExitAnimation">@anim/popup_hide</item>
</style>

и установите для вашего стиля анимации значение R.style.AnimationPopup. Это сработает.

У меня есть эта информация из https://github.com/lorensiuswlt/NewQuickAction3D, документация, похоже, не упоминала об этом.

Update:

Обновление Android SDK в 2012 году изменило синтаксис XML. Оригинал @android:windowEnterAnimation теперь стал android:windowEnterAnimation. Поэтому этот ответ обновляется соответствующим образом.