2011-09-15 46 views
11

Tôi có một PopupWindow đẹp mà tôi muốn xuất hiện với một hình ảnh động. Tôi làm điều đó như thế này:PopupWindow hoạt hình không hoạt động

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

sau đó tôi thiết lập một người biết lắng nghe để thay đổi hình ảnh động:

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

Nhưng, hey, nó sẽ không làm việc. Không cho res/anim/xuất hiện:

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

cũng không cho res/anim/biến mất:

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

manh mối Bất kỳ?

Trả lời

49

Thực tế, PopupWindow.setAnimationStyle dự kiến ​​một kiểu có 2 mục nhập. Bạn sẽ cần phải có hai xml, mỗi xml chứa <set>, một cho hiển thị và một cho ẩn cửa sổ. Khi việc này được thực hiện, hãy đặt đoạn sau vào các giá trị/styles.xml:

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

và đặt kiểu hoạt ảnh thành R.style.AnimationPopup. Điều đó sẽ làm.

Tôi có thông tin này từ https://github.com/lorensiuswlt/NewQuickAction3D tài liệu dường như không đề cập đến nó.

Cập nhật:

Bản cập nhật Android SDK vào năm 2012 đã thay đổi cú pháp XML. Bản gốc @android:windowEnterAnimation giờ đã trở thành android:windowEnterAnimation. Vì vậy, câu trả lời này được cập nhật cho phù hợp.

+0

Cảm ơn! Tôi sẽ thử điều này – slipbull

+0

Cảm ơn! Đề xuất của bạn làm việc cho tôi. – kgiannakakis

+2

Làm thế nào về việc chấp nhận điều này như là câu trả lời nếu nó đã giúp bạn. Để người khác có thể dễ dàng biết được điều này có hiệu quả không. –

Các vấn đề liên quan