2011-01-27 36 views
78

Tôi đang cố gắng để có hộp thoại tùy chỉnh xuất hiện như thể hộp thoại trượt xuống từ chế độ xem văn bản. Điều này có thể không? Tôi dường như không thể áp dụng bất kỳ hình động nào cho lớp đối thoại. Tôi đã thử dòng này trong hàm tạo, nhưng nó không có hiệu lực:Tạo hiệu ứng cho Hộp thoại tùy chỉnh

this.getWindow(). SetWindowAnimations (R.anim.paranimation);

Tôi thậm chí không chắc chắn liệu hoạt ảnh có chính xác hay không, nhưng tôi sẽ có thể điều chỉnh nó sau khi tôi thấy nó đang làm gì. Tôi sẽ liệt kê nó dưới đây vì mục đích hoàn chỉnh. Tôi không tìm kiếm sự trợ giúp về hoạt hình thực tế, chỉ là ứng dụng cho hộp thoại.

paranimation.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="-200%" 
    android:toXDelta="0%" 
    android:fromYDelta="200%" 
    android:toYDelta="0%" 
    android:duration="3000" 
    android:zAdjustment="top"> 
</translate> 
+3

Tôi cũng cần biết điều này. Có vẻ như có thể sinh động bất cứ thứ gì, ngoài việc này. Hoặc là tôi sai?! –

Trả lời

180

Tôi đã đấu tranh với hoạt hình Dialog ngày hôm nay, cuối cùng đã nhận nó làm việc sử dụng phong cách, vì vậy đây là một ví dụ.

Để bắt đầu, điều quan trọng nhất - có lẽ tôi đã làm việc theo 5 cách khác nhau nhưng không thể nói vì ... Nếu cài đặt hoạt ảnh của thiết bị được đặt thành "Không có hoạt ảnh" (Cài đặt → Hiển thị → Hoạt ảnh) sau đó các hộp thoại sẽ không hoạt ảnh bất kể bạn làm gì!

Sau đây là phiên bản rút gọn của tệp styles.xml của tôi. Hy vọng rằng nó là tự giải thích. Địa chỉ này sẽ được đặt tại res/values.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
     <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> 
    </style> 

    <style name="PauseDialogAnimation"> 
     <item name="android:windowEnterAnimation">@anim/spin_in</item> 
     <item name="android:windowExitAnimation">@android:anim/slide_out_right</item> 
    </style> 
</resources> 

Các windowEnterAnimation là một trong những hình ảnh động của tôi và nằm ở res\anim. windowExitAnimation là một trong các hoạt ảnh là một phần của SDK Android.

Sau đó, khi tôi tạo Hộp thoại trong hoạt động của mình, phương pháp onCreateDialog(int id) Tôi làm như sau.

Dialog dialog = new Dialog(this, R.style.PauseDialog); 

// Setting the title and layout for the dialog 
dialog.setTitle(R.string.pause_menu_label); 
dialog.setContentView(R.layout.pause_menu); 

Hoặc bạn có thể đặt hoạt ảnh theo cách sau thay vì sử dụng hàm tạo Dialog có chủ đề.

Dialog dialog = new Dialog(this); 
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
+0

Điều tuyệt vời! sẽ nhớ đặt mã cho @ anim/spin_in? – Neutralizer

+2

Đó chỉ là một cái tên tôi đã tạo ra cho ví dụ này, tôi chưa bao giờ thực sự tạo ra hình động đó. – ChrisJD

+2

Cảm ơn bạn rất nhiều vì câu trả lời này, nó thực sự kém tài liệu, mặc dù tôi đã tìm thấy bài đăng này thông qua một đầu mối từ [Nhà phát triển Android] (http://groups.google.com/group/android-developers/browse_thread/thread/d28096a900b83f0c) nhóm. –

42

Tôi đã tạo hoạt ảnh mờ dần và mờ dần cho Hộp thoại bằng mã ChrisJD.

  1. res Bên trong/style.xml

    <style name="AppTheme" parent="android:Theme.Light" /> 
    <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
        <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> 
    </style> 
    
    <style name="PauseDialogAnimation"> 
        <item name="android:windowEnterAnimation">@anim/fadein</item> 
        <item name="android:windowExitAnimation">@anim/fadeout</item> 
    </style> 
    

  2. Bên anim/fadein.xml

    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" /> 
    
  3. Bên anim/fadeut.xml

    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/anticipate_interpolator" 
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" /> 
    
  4. MainActivity

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog); 
    
+8

Bạn có thể sử dụng hình động mặc định của android fade '@android: anim/fade_in' '@android: anim/fade_out' – Marek

+0

Hoạt ảnh dường như không hoạt động trên hộp thoại. – portfoliobuilder

7

tôi gặp cùng một vấn đề, nhưng, cuối cùng tôi giải quyết vấn đề bằng cách người sau

((ViewGroup)dialog.getWindow().getDecorView()) 
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,android.R.anim.slide_in_left)); 
+4

Không phải là câu trả lời hợp lý. Các chế độ xem bên trong hộp thoại được hoạt ảnh – DJphy

14

Đối phải sang trái (mục nhập hoạt ảnh) và từ trái sang phải (thoát hình động):

styles.xml:

<style name="CustomDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item> 
</style> 

<style name="CustomDialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/translate_left_side</item> 
    <item name="android:windowExitAnimation">@anim/translate_right_side</item> 
</style> 

Tạo hai tập tin trong res/anim /:

translate_right_side.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0%" android:toXDelta="100%" 
    android:fromYDelta="0%" android:toYDelta="0%" 
    android:duration="600"/> 

translate_left_side.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="600" 
    android:fromXDelta="100%" 
    android:toXDelta="0%"/> 

Trong bạn Phân đoạn/Hoạt động:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog); 
Các vấn đề liên quan