मैं गतिविधि खत्म करने के लिए एक एनीमेशन कैसे जोड़ सकता हूं ()


98

जब मेरी गतिविधि बनती है और जो ठीक काम करता है, उसके लिए मैं ओवरराइडिंगट्रेन्शन का उपयोग कर रहा हूं, मैं फीके को शानदार तरीके से देख सकता हूं, लेकिन जब मैं कोशिश करता हूं और गतिविधि को खत्म करना चाहता हूं तो यह अभी भी बाएं से दाएं स्लाइड को सही कर रहा है।

जब मैंने गतिविधि शुरू की तो मैंने पहले एनीमेशन को परिभाषित करने की कोशिश की:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

तब मैंने इसे करने की कोशिश की जब मैं गतिविधि को पूरा करता हूं

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

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

जवाबों:


228

मैं केवल कॉलिंग खत्म होने के बाद लंबित संक्रमण को ओवरराइड करता हूं ();

मेरे मामले में, मैंने संक्रमण से बचने के लिए ऐसा किया है।

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

आदेश महत्वपूर्ण है :)


5
"विवरण" द्वारा, @Goofyahead अपनी संलग्न गतिविधि का नामकरण कर रहा है - ymmv। इस तकनीक ने मुझे 2.x पर Theme.Dialog से एक एनीमेशन को बदलने के लिए काम किया, लेकिन 3.x या 4.x पर नहीं
लार्हम 1

8
कैसा R.anim.nothingदिखता है?
सैंडलोन

@ फेलिप मकारोनी लल्ली उत्तर का उपयोग करें, 0 का मतलब कोई एनीमेशन नहीं है।
युंग

इस तरह से मुझे भी मदद मिली। यह बताता है कि अपने स्वयं के एनिमेशन को कैसे परिभाषित करें: stackoverflow.com/questions/5151591/…
एडम

23
आप finish()सभी मामलों में संक्रमण से बचने के लिए विधि को ओवरराइड कर सकते हैं (नमूना के रूप में दबाया गया पिछला बटन): @Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
eugeneek

29

यह सवाल पहले ही जवाब दे चुका है लेकिन किसी गतिविधि से बाहर निकलते समय एनीमेशन डालने का सबसे कारगर तरीका संबंधित गतिविधि की "फिनिश ()" विधि को ओवरराइड करके है:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}

24

मैं सुझाव दूंगा कि फ़िनिशिंग का उपयोग करें () विधि कॉलिंग फ़िनिश के बजाय ऑनपोज़ पर एनिमेशन कॉन्फ़िगर करने के लिए ()

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}

क्यों बेहतर है?
मैनुअल


19

मैंने इस तरह के दृष्टिकोण का उपयोग करके इस मुद्दे को ठीक किया:

एनीमेशन के साथ खोलने के लिए:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

एनीमेशन के साथ बंद करने के लिए:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
}

12

एक विषय के माध्यम से यह करने में देखो। आप गतिविधियों या संपूर्ण एप्लिकेशन के लिए एग्जिट एक्जिट एनिमेशन को परिभाषित कर सकते हैं


हाँ! वह यह था। हाँ उस जैसा। मैंने पहले ही एक विषय लागू कर दिया था, और विषय में एक एनीमेशन परिभाषित था, इसलिए मुझे काम करने के लिए अपना एनीमेशन नहीं मिला। अंतर्दृष्टि के लिए एक टन धन्यवाद!
b-ryce

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

@Zapnologica यह एक और प्रश्न के लिए दिया गया यह अन्य उत्तर मैं इसे थोड़ा और अधिक मंत्र देता हूं। stackoverflow.com/questions/4940574/…
नाथन श्वरमन

6

@Schwiz के उत्तर के बाद, यहां एक अंतर्निहित ओवररोग थीम के लिए एक एनीमेशन ओवरराइड है, जहां मैंने स्थानीय स्लाइड_अप और स्लाइड_डाउन एनिमेशन को परिभाषित किया है। मेरी गतिविधि इन परिवर्तनों को अंदर और बाहर करने के लिए थीम MyDialog को निर्दिष्ट करती है।

<style name="Animation.MyDialog" parent="android:Animation.Dialog">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_down</item>
</style>

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


5

अपने बच्चे की गतिविधि शुरू करने और अपनी मूल गतिविधि के onActivityResult () में startActivityForResult का उपयोग करें:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}

यह बैक प्रेस (भौतिक बटन) पर काम करता है। इसे "ऊपर" तीर के साथ भी काम करने के लिए, इस उत्तर को देखें: /programming/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is- क्लिक किया / 20161352 # 20161352
लिनोहोह

नोट करने के लिए महत्वपूर्ण: overridePendingTransition को super.onActivityResult पर कॉल करने से पहले कॉल करना होगा। अन्यथा पेंडेंट संक्रमण को ओवरराइड नहीं किया जाएगा!
गोइमिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.