एक कस्टम संवाद चेतन


97

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

। 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>

4
मुझे यह भी जानना चाहिए। इसके अलावा, किसी भी चीज के बारे में चेतन करना संभव है। या मैं गलत हूँ?!
andy_spoo

जवाबों:


215

मैं आज डायलॉग एनीमेशन के साथ संघर्ष कर रहा हूं, आखिरकार इसे शैलियों का उपयोग करके काम करना है, इसलिए यहां एक उदाहरण है।

के साथ शुरू करने के लिए, सबसे महत्वपूर्ण बात - मैंने शायद आज 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\animwindowExitAnimationएनिमेशन कि एंड्रॉयड एसडीके का हिस्सा है में से एक है।

फिर जब मैं अपनी गतिविधियों के 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;

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

2
इस उत्तर के लिए बहुत बहुत धन्यवाद, यह वास्तव में खराब दस्तावेज है, हालांकि मुझे यह पोस्ट एंड्रॉइड डेवलपर्स समूह के एक सुराग के माध्यम से मिली ।
डेविड स्नेबेल-कॉंट

3
+1 के लिए "यदि आपके डिवाइस एनीमेशन सेटिंग" नो एनिमेशन "पर सेट हैं (सेटिंग्स → डिस्प्ले → एनिमेशन) तो डायलॉग्स एनिमेटेड नहीं रहेंगे चाहे आप कुछ भी करें!"। मैं जाँच करना भूल गया था।
विन्सेन्ट मिमौन-प्रात

Dialog dialog = new Dialog(this, R.style.PauseDialog);यह API 11 के लिए है, लेकिन यह सामान्य हैDialog dialog = new Dialog(Context context);
mehmet

2
मुद्दा मैं इस में सामना कर रहा हूं कि जब मैं ऐप को कम कर देता हूं जब संवाद दिखा रहा होता है और फिर से ऐप को पुनर्स्थापित करता है, तो डायलॉग फिर से एनिमेट करता है कि कैसे बचें, इसके सही को आराम करें। +1
पार्थ अंजारिया

56

मैंने क्रिसजेड कोड का उपयोग करके डायलॉगबॉक्स के लिए फीका इन और फेड आउट एनीमेशन बनाया है।

  1. Res / 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. अंदर एनिमेशन / 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. अंदर एनिमेशन / fadeout.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. मुख्य गतिविधि

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

11
आप डिफ़ॉल्ट Android फीका एनिमेशन '@ थायरॉयड: एनीमेशन / फीका_इन' का उपयोग कर सकते हैं: @android: anim / fade_out '
मारेक

19

दाएं से बाएं (एंट्री एनिमेशन) और बाएं से दाएं (निकास एनीमेशन):

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>

रेस / ऐनिमेशन / में दो फाइल बनाएँ:

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

13

मैं उसी समस्या को पूरा करता हूं, लेकिन, आखिरकार मैं इस समस्या को हल कर देता हूं

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

4
समझदार उत्तर नहीं। संवाद के अंदर के दृश्य एनिमेटेड हो जाते हैं
डीजेफि

12

सबसे पहले, आपको res / anim dir में दो एनीमेशन संसाधन बनाने होंगे

slide_up.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromYDelta="100%"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toXDelta="0">
</translate>
</set>

slide_bottom.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
    android:duration="@android:integer/config_mediumAnimTime" 
    android:fromYDelta="0%p" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:toYDelta="100%p">
</translate>
</set>

फिर आपको एक शैली बनानी होगी

<style name="DialogAnimation">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_bottom</item>
</style>

और इस लाइन को अपनी कक्षा में जोड़ें

dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id

Http://www.devexchanges.info/2015/10/showing-dialog-with-animation-in-and.net.html पर आधारित


संदर्भ URL उपयोगी है!
अहमदीनेबेल88

2

कोड के नीचे आज़माएं:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// set transparent in window background

        View _v = inflater.inflate(R.layout.some_you_layout, container, false);

        //load animation
        //Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in);// system animation appearance
        Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), R.anim.customer_anim);//customer animation appearance

        _v.setAnimation( transition_in_view );
        _v.startAnimation( transition_in_view );
        //really beautiful
        return _v;

    }

कस्टम ऐनिमेट बनाएँ: res / anim / customer_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="500"
        android:fromYDelta="100%"
        android:toYDelta="-7%"/>
    <translate
        android:duration="300"
        android:startOffset="500"
        android:toYDelta="7%" />
    <translate
        android:duration="200"
        android:startOffset="800"
        android:toYDelta="0%" />

</set>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.