2014-10-17 9 views
41

मैं एक डेमो एप्लिकेशन पर काम कर रहा हूं जहां मैं एनीमेशन लागू करना चाहता हूं जब भी ऐप activity शुरू करता है। मैंने कोड नीचे लिखा है लेकिन यह गतिविधि को बाएं से दाएं को एनिमेट करने के लिए है।गतिविधि शुरू करने के लिए बाएं एनीमेशन को सही तरीके से कैसे प्राप्त करें

left_to_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate android:fromXDelta="-100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500"/> 
</set> 

right_to_left.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:duration="500" 
     android:fromXDelta="0%" 
     android:fromYDelta="0%" 
     android:toXDelta="100%" 
     android:toYDelta="0%" /> 
</set> 

मैं यहाँ एक activity इस

startActivity(new Intent(this, LoginActivity.class)); 
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); 

मैं एक एनीमेशन दाएं से बाएं हासिल करना चाहते हैं की तरह शुरू कर रहा हूँ। यह कैसे किया जा सकता है।

अग्रिम धन्यवाद।

उत्तर

87

बाएं से करने के लिए इन संशोधनों करें आपकी एनीमेशन फाइलें:

enter.xml:

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:duration="500" 
     android:fromXDelta="100%" 
     android:fromYDelta="0%" 
     android:toXDelta="0%" 
     android:toYDelta="0%" /> 
</set> 

exit.xml:

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:duration="500" 
     android:fromXDelta="0%" 
     android:fromYDelta="0%" 
     android:toXDelta="-100%" 
     android:toYDelta="0%" /> 
</set> 

आप अपने दूसरी गतिविधि दाएं से बाएं से में फिसलने होगा। Activity transition values on X axis

इस तरह से आप आसानी से तुम क्यों एंड्रॉयड जोड़ने समझ सकते हैं:

कैसे एनिमेशन के लिए fromXDelta और toXDelta मूल्यों के साथ चारों ओर खेलने के लिए पर एक बेहतर समझ के लिए, यहाँ मूल्यों पर एक बहुत ही बुनियादी उदाहरण है: आपकी वर्तमान गतिविधि के लिए xXDelta = "0%" और एंड्रॉइड: toXDelta = "- 100%"। और ऐसा इसलिए है क्योंकि आप इसे 0% से -100% स्थिति में जाना चाहते हैं।

[संपादित करें]

तो अगर आप ActivityA से ActivityB को खोलने के लिए आप निम्न उपाय अपनाते हैं (मान लीजिए कि आप एक बटन डालते हैं) हैं:,

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startActivity(new Intent(ActivityA.this, ActivityB.class)); 
      overridePendingTransition(R.anim.enter, R.anim.exit); 
     } 
    }); 

अब अगर आप करना चाहते हैं पहली बार एनीमेशन ", जब आप एक्टिविटी बी छोड़ते हैं, तो आपको 2 नई एनीमेशन फाइलों और एक्टिविटी की ऑनबैकप्रेस विधि में कुछ कोड की आवश्यकता होगी, जैसे:

पहले एनीमेशन फाइलें: left_to_right.xml:

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

right_to_left।xml:

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

और ActivityB में निम्न कार्य करें:

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

इसके अलावा, अगर आप ऊपर है नेविगेशन सक्षम हैं तो आप इस मामले में एनीमेशन जोड़ने के लिए और साथ ही होगा:

आप यूपी नेविगेशन को इस तरह सक्षम करें:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
} 

और इस तरह आप इस मामले में एनीमेशन को भी संभालते हैं:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     //NavUtils.navigateUpFromSameTask(this); 
     finish(); 
     overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

यह भी ध्यान रखें कि यदि आपका कोड ठीक है, तो भी आपके फोन में एनीमेशन बंद हो सकता है। तो मोड़ पर निम्नलिखित कार्य करें:

  1. सेटिंग खोलें और डेवलपर विकल्प के लिए जाना
  2. यकीन है कि यह सक्षम है
  3. नीचे स्क्रॉल (ऊपर दाईं ओर टॉगल बटन रपट के आधार पर) और, नल आहरण के तहत इन विकल्पों में एक के बाद एक: विंडोज एनिमेशन स्केल, संक्रमण एनिमेशन स्केल, और एनिमेटर अवधि स्केल
  4. का चयन करें "एनिमेशन स्केल 1x"

इस मदद करता है?

+0

क्या गतिविधि और लक्ष्य गतिविधि शुरू करने के लिए लिखने के लिए? –

+1

मैं यह – Mike

+0

जोड़ने के लिए अपना उत्तर संपादित करूंगा यदि आप बाएं से दाएं को भी जोड़ते हैं तो यह अच्छा होगा –

1

इस कोड की कोशिश करें, यह मेरे लिए

काम कर रहा है सही से स्लाइड करने के लिए

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

स्लाइड करने के लिए छोड़ दिया करने के लिए सही

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

overridePendingTransition को "लक्ष्य" गतिविधि में बुलाया जाना चाहिए। उदाहरण के लिए: गतिविधि ए -> बी से जाकर, आप overridePendingTransition को गतिविधि बी

पर ध्यान दें, अगर उपयोगकर्ता ने सिस्टम स्तर पर एनीमेशन अक्षम कर दिया है, तो आप एनीमेशन को मजबूर नहीं कर सकते प्रदर्शन।

संपादित करें:

एक उदाहरण इस प्रकार दिखाई देगा:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    overridePendingTransition(R.anim.enter, R.anim.exit); 
} 
+0

इसे प्राप्त करने के लिए लक्षित गतिविधि में क्या लिखना है? –

+0

कृपया अपनी गतिविधि ए और बी में जोड़ने के लिए एक उदाहरण के लिए संपादन देखें – soundsofpolaris

संबंधित मुद्दे

 संबंधित मुद्दे