2011-01-27 17 views
78

एनिमेट करें मैं एक कस्टम संवाद प्रकट करने की कोशिश कर रहा हूं जैसे कि यह एक टेक्स्ट व्यू से नीचे फिसल रहा है। क्या यह संभव है? मैं संवाद वर्ग में किसी एनीमेशन को लागू नहीं कर सकता। मैंने कन्स्ट्रक्टर में इस लाइन को आजमाया है, लेकिन इसका कोई असर नहीं है:एक कस्टम संवाद

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

मुझे यह भी सुनिश्चित नहीं है कि एनीमेशन सही है या नहीं, लेकिन यह देखने के बाद मैं इसे समायोजित कर पाऊंगा कि यह क्या कर रहा है। पूर्णता के लिए मैं इसे नीचे सूचीबद्ध करूंगा। मैं वास्तविक एनीमेशन पर केवल मदद के लिए आवेदन की तलाश नहीं कर रहा हूं।

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

मुझे यह भी पता होना चाहिए। इसके अलावा, कुछ भी इसके बारे में एनिमेट करना संभव लगता है। या मैं गलत हूँ?! –

उत्तर

180

मैं आज संवाद एनीमेशन के साथ संघर्ष कर रहा है, अंत में यह शैलियों का उपयोग कर काम कर रहा है, तो यहाँ एक उदाहरण है मिला है।

प्रारंभ करने के लिए, सबसे महत्वपूर्ण बात - शायद मैंने इसे आज 5 अलग-अलग तरीकों से काम किया था लेकिन यह नहीं बता सका क्योंकि ... यदि आपके डिवाइस एनीमेशन सेटिंग्स "कोई एनिमेशन नहीं" (सेटिंग्स → डिस्प्ले → एनीमेशन) पर सेट हैं तो संवाद एनिमेटेड नहीं होंगे इससे कोई फर्क नहीं पड़ता कि आप क्या करते हैं!

निम्नलिखित मेरी शैलियों का एक अलग संस्करण है। Xml। उम्मीद है कि यह आत्म-व्याख्यात्मक है। यह 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> 

windowEnterAnimation मेरी एनिमेशन में से एक है और res\anim में स्थित है। windowExitAnimation एंड्रॉइड एसडीके का हिस्सा है जो एनिमेशन में से एक है।

तब जब मैं अपनी गतिविधियों में संवाद बना देता हूं onCreateDialog(int id) विधि मैं निम्नलिखित करता हूं।

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); 

वैकल्पिक रूप से आप एक थीम लेते हुए संवाद निर्माता का उपयोग करने के बजाय एनिमेशन को निम्न तरीके से सेट कर सकते हैं।

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

महान चीज़! @ anim/spin_in के लिए कोड डालने पर ध्यान लगेगा? – Neutralizer

+2

यह सिर्फ एक नाम था जिसे मैंने इस उदाहरण के लिए बनाया था, मैंने वास्तव में उस एनीमेशन को कभी नहीं बनाया। – ChrisJD

+2

इस उत्तर के लिए बहुत बहुत धन्यवाद, यह वास्तव में खराब दस्तावेज है, हालांकि मुझे यह पोस्ट [एंड्रॉइड डेवलपर्स] (http://groups.google.com/group/android-developers/browse_thread/thread/d28096a900b83f0c) से एक सुराग के माध्यम से मिला है। समूह। –

42

मैं में फीका बनाया है और ChrisJD कोड का उपयोग कर Dialogbox के लिए एनीमेशन कम हो गए हैं।

  1. अंदर रेस/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. 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. अंदर anim/fadeut।एक्सएमएल

    <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

आप डिफ़ॉल्ट एंड्रॉइड फीड एनिमेशन का उपयोग कर सकते हैं'andand: anim/fade_in ''andand: anim/fade_out' – Marek

+0

एनीमेशन संवाद पर काम नहीं कर रहा है। – portfoliobuilder

7

मैं एक ही समस्या से मिलने, लेकिन, अंत में मैं पीछा रास्ता

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

एक समझदार जवाब नहीं है। संवाद के अंदर विचार एनिमेटेड हो जाता है – DJphy

14

के लिए दाईं से बाईं ओर (द्वारा समस्या का समाधान प्रवेश एनीमेशन) और बाएं से दाएं (बाहर निकलें एनीमेशन):

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> 

में रेस/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%"/> 

आप में फ्रैगमेंट/गतिविधि:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog); 
संबंधित मुद्दे