2013-03-01 8 views
12

पर ओवरराइड पेन्डिंग ट्रांसमिशन का उपयोग करते समय स्क्रीन यादृच्छिक रूप से चमकती है यह समस्या केवल जेली बीन 4.1 और 4.2 (गैलेक्सी नेक्सस और नेक्सस 4 पर परीक्षण) पर होती है। यहाँ मैं overridePendingTransitionजेली बीन

कैसे उपयोग है जब एक नया गतिविधि शुरू होता है:

Intent intent = new Intent(ActivityA.this, ActivityB.class); 
startActivity(intent); 
overridePendingTransition(R.anim.transition_right_to_left, 
        R.anim.transition_right_to_left_out); 

जब खत्म एक गतिविधि पिछले एक

finish(); 
overridePendingTransition(R.anim.transition_left_to_right, R.anim.transition_left_to_right_out); 

transition_left_to_right को वापस करने के लिए

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
android:fromXDelta="-100%p" 
android:toXDelta="0" 
android:duration="@integer/transition_duration"/> 

transition_left_to_right_out

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
android:fromXDelta="0" 
android:toXDelta="100%p" 
android:duration="@integer/transition_duration"/> 

transition_right_to_left

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

transition_right_to_left_out

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

और यह है कि कैसे स्क्रीन चमक: http://youtu.be/TUKRz2yVF6Q (केवल 01:00 होता है)

कृपया मुझे बताओ कि यदि आप जानते हैं क्या मेरे कोड के साथ गलत और डिवाइस स्क्रीन कभी-कभी क्यों चमकती है? धन्यवाद।

संपादित करें: कोशिश की Jelly Bean पर ActivityOptions उपयोग करने के लिए, लेकिन यह अपने दोनों एनीमेशन एक्सएमएल फाइल

android:fillAfter="true" 
+1

एक विशिष्ट Android डिवाइस या हर Android डिवाइस जेली बीन के समर्थन पर आ समस्या है? –

+0

मुझे नहीं पता क्योंकि मेरे पास गैलेक्सी नेक्सस और नेक्सस 4 को छोड़कर परीक्षण करने के लिए कई डिवाइस नहीं हैं। – Wayne

+0

लेकिन आप अलग-अलग ओएस संस्करणों के साथ विभिन्न अनुकरणकर्ताओं पर कोशिश कर सकते हैं –

उत्तर

5

मैं ठीक उसी समस्या हुई। मैं interelerator को accelerate_decelerate_interpolator के बजाय linear_interpolator में बदलकर इसे हल करने में सक्षम था।

+0

धन्यवाद, समस्या हल हो गई! – Wayne

+1

मेरी खुशी, यदि आपने अन्य प्रश्नों पर यह प्रश्न पोस्ट किया है, तो कृपया इस समाधान को भी साझा करें ... –

2

कोशिश गतिविधियां "विकल्प सेटिंग्स में डेवलपर विकल्प अनुभाग में चालू है?

+1

आपके उत्तर के लिए धन्यवाद लेकिन इससे मदद नहीं मिली, और मुझे लगता है कि ओवरराइड के लिए एनीमेशन PendingTransition को fillAfter की आवश्यकता नहीं है। – Wayne

+1

फिर भरें 'पहले? फ्लैशिंग तब हो सकती है जब स्थिर (गैर-एनिमेटेड) दृश्य खींचा जाने के बाद एनीमेशन का पहला फ्रेम खींचा जाता है - उदाहरण के लिए यह 'transition_left_top_right' पर होने की संभावना है क्योंकि पहले स्क्रीन पर लक्ष्य दृश्य खींचा जाता है, और शुरू होता है एनीमेशन शुरू होने पर स्क्रीन से बाहर निकलें –

+0

भरें इससे पहले भी मदद नहीं कर सकता। – Wayne

2

कोई मौका तुम हो "न रखें में निम्न पंक्ति जोड़कर मदद नहीं की

+1

मुझे खेद है कि "गतिविधियां न रखें" विकल्प सक्षम नहीं है। – Wayne

-1

मूर्खतापूर्ण सुझाव लेकिन क्या आपने एनीमेशन/फिनिश() के ऑर्डरिंग को बदलने की कोशिश की है?

इस तरह:

overridePendingTransition(R.anim.transition_left_to_right, R.anim.transition_left_to_right_out); 
finish(); 
+1

मुझे खेद है लेकिन एंड्रॉइड दस्तावेज़ ने कहा है कि ओवरराइडिंग ट्रांसमिशन को फिनिश() या स्टार्ट एक्टिविटी() (http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int, int) के तुरंत बाद बुलाया जाना चाहिए।)। मैंने पहले से ही कोशिश की लेकिन निश्चित रूप से यह मदद नहीं कर सका। – Wayne

0

आप गतिविधि संक्रमण में देरी करके और कुछ दृश्य तत्व का उपयोग साझा तत्व संक्रमण "एंकर" के रूप में कर सकते हैं।

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_match_score); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().setEnterTransition(null); 
    } 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     // Postpone the shared element enter transition. 
     postponeEnterTransition(); 
    } 
} 

अब आप सिर्फ़ अपने ऐप्लिकेशन में एक बिंदु है जहां सब कुछ स्क्रीन पर प्रदर्शित किया जाना चाहिए से '() scheduleStartPostponedTransition' कहते हैं की जरूरत है। यह तकनीक बहुत अच्छी तरह से काम करती है और गतिविधियों को स्विच करते समय स्क्रीन फ्लैश समस्या हल करती है।

// 
// Schedules the shared element transition to be started immediately 
// after the shared element has been measured and laid out within the 
// activity's view hierarchy. Some common places where it might make 
// sense to call this method are: 
// 
// (1) Inside a Fragment's onCreateView() method (if the shared element 
//  lives inside a Fragment hosted by the called Activity). 
// 
// (2) Inside a Picasso Callback object (if you need to wait for Picasso to 
//  asynchronously load/scale a bitmap before the transition can begin). 
// 
// (3) Inside a LoaderCallback's onLoadFinished() method (if the shared 
//  element depends on data queried by a Loader). 
// 
public void scheduleStartPostponedTransition(final ImageView sharedElement) { 
    LogHelper.v(TAG, "scheduleStartPostponedTransition"); 
    sharedElement.getViewTreeObserver().addOnPreDrawListener(
      new ViewTreeObserver.OnPreDrawListener() { 
       @Override 
       public boolean onPreDraw() { 
        sharedElement.getViewTreeObserver().removeOnPreDrawListener(this); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
         startPostponedEnterTransition(); 
        } 
        return true; 
       } 
      }); 
} 

देखें http://www.androiddesignpatterns.com/2015/03/activity-postponed-shared-element-transitions-part3b.html

+0

आपके द्वारा प्रस्तावित ट्रांज़िशन एपीआई एपीआई वी 20 में जोड़ा गया था - जेली बीन एपीआई v16 है –

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