11

मेरी एप्लिकेशन मुख्य स्क्रीन में छवियों का ग्रिड दृश्य होता है। जब उपयोगकर्ता कोई छवि चुनता है, तो साझा तत्व संक्रमण का उपयोग करके एक विस्तार गतिविधि शुरू की जाती है जो चयनित ग्रिड छवि को कार्डव्यू में विस्तारित गतिविधि में स्थित एक युग्मित छवि में एनिमेट करता है।साझा तत्व संक्रमण एक समन्वयक के साथ संयुक्त होने पर काम नहीं कर रहे हैं और CollapsingToolbarLayout

मेरी विवरण दृश्य एक्सएमएल लेआउट उन्नयन एक CollapsingToolbarLayout साथ साथ एक CoordinatorLayout शामिल करने के लिए करने के बाद, साझा तत्व संक्रमण छवि गलत स्थान विस्तार गतिविधियों में ("enter" गतिविधि) दृश्य ले जाता है। ढांचे पूरे ऐपबारलाउट और ऑफ्रल को संकुचित करने के लिए प्रतीत होता है और छवि अनुमानित स्थिति में एनिमेट करता है अगर 0Vमें लक्ष्य छवि दृश्य शामिल है तो कार्डव्यू के ऊपर कोई CollapsingToolBarLayout नहीं होगा।

समस्या activity_detail.xml में 3 CardViews में से किसी एक को जोड़ने में कोई imageView (एक transitionName के साथ) द्वारा क्रिस बेंस 'cheesesquare sample app में दोहराया जा सकता है:

<ImageView 
android:id="@+id/imageView" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@mipmap/ic_launcher" 
android:transitionName="sharedImage" /> 

करके सेट करने के लिए एक साझा तत्व संक्रमण onBindViewHolder में CheeseListFragment.java में इस प्रकार है:

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.mBoundString = mValues.get(position); 
     holder.mTextView.setText(mValues.get(position)); 

     holder.mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent = new Intent(context, CheeseDetailActivity.class); 
       intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString); 

       holder.mImageView.setTransitionName("sharedImage");       
       ActivityOptionsCompat options = ActivityOptionsCompat. 
         makeSceneTransitionAnimation(
           getActivity(v.getContext()), 
              holder.mImageView,      
              "sharedImage"); 
       ActivityCompat.StartActivity((MyActivity) context, intent, options.toBundle()); 
      } 
     }); 

     Glide.with(holder.mImageView.getContext()) 
       .load(Cheeses.getRandomCheeseDrawable()) 
       .fitCenter() 
       .into(holder.mImageView); 
    } 

आप एप्लिकेशन को चलाने के लिए, और एक पनीर सूची आइटम पर क्लिक करते हैं, आप कैसे करेंगे संक्रमण एनीमेशन छवि को गंतव्य गतिविधि दृश्य में गलत (बहुत अधिक) ऑफसेट पर ले जाता है। एक बार एनीमेशन पूर्ण हो जाने पर छवि को सही स्थिति में "वार" करने के लिए दिखाई देगी।

संभावित कार्य-आस-पास के किसी भी विचार का बहुत स्वागत है।

+0

मुझे इस समस्या के लिए एक फिक्स मिला है और यह मेरे रेपो में है https://github.com/lawloretienne/SharedElementTransition – toobsco42

उत्तर

2

जवाब, सरल, cheesesquare activity_detail.xml लेआउट, संक्षेप में है इस तरह दिखता है ...

<android.support.design.widget.CoordinatorLayout 
    android:fitsSystemWindows="true" 
    ...> 

    <android.support.design.widget.AppBarLayout 
     android:fitsSystemWindows="true" 
     ...> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:fitsSystemWindows="true" 
      ...> 

      <ImageView 
       android:fitsSystemWindows="true" 
       ... /> 

      <android.support.v7.widget.Toolbar 
       ... /> 

     </android.support.design.widget.CollapsingToolbarLayout> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     app:layout_behaviour="@string/appbar_scrolling_view_behaviour" 
     ...> 

</android.support.design.widget.CoordinatorLayout> 

क्या इस लेआउट के साथ गलत है कि एंड्रॉयड है: fitsSystemWindows संपत्ति की जरूरत है नीचे प्रचारित किया जाना है सभी कंटेनरों के लिए लेआउट श्रृंखला, और प्रकाशित डेमो ऐप में, यह संपत्ति NestedScrollView के लिए अनुपलब्ध है। NestedScrollView को

 <android.support.v4.widget.NestedScrollView 
     app:layout_behaviour="@string/appbar_scrolling_view_behaviour" 
     android:fitsSystemWindows="true" 
     ...> 

समस्या को हल करता है। यह शायद डेमो गिथब कोड में बदला जाना चाहिए।

+0

मुझे अभी भी नेविगेशन बार और स्टेटस बार के साथ झिलमिलाहट मिलती है जब मेरे पास चीजस्क्वेयर विवरण के समान लेआउट होता है स्क्रीन लेआउट। साझा तत्व संक्रमण के लिए आप इसे कैसे ठीक करते हैं? – toobsco42

+0

उत्तर इस पोस्ट में पाया जा सकता है। http://stackoverflow.com/questions/26600263/how-do-i-prevent-the-status-bar-and-navigation-bar-from-animating-during-an-acti –

0

हल हो गया!

अगर किसी को इस त्रुटि का सामना करना पड़ रहा है जिसमें वे समन्वयक लेआउट का उपयोग कर रहे हैं जिसमें साझा तत्व शामिल हैं, जो पिछली गतिविधि से साझा तत्व संक्रमण के दौरान समन्वयक लेआउट होता है, संक्रमण एनीमेशन के दौरान गलत तरीके से रखा जाता है। यह डिज़ाइन समर्थन लाइब्रेरी संस्करण "com.android.support:design:22.2 में एक बग है।0: com.android.support:design:23.1.0 " build.gradle में (ऐप्लिकेशन)

"

समाधान

बदलें संस्करण करने के लिए "

सब कुछ इरादे के अनुसार सही काम करेगा। यह मेरे लिए काम करता है, इस समाधान को बहुत सारे शोध के बाद मिला।

+0

क्षमा करें उदित, लेकिन आपका समाधान नहीं है मुद्दे को हल करें। मैंने अभी इसे डिजाइन के साथ परीक्षण किया है: 23.1.1 और यह अभी भी दिखाया गया है। बस अपने फोन के डेवलपर विकल्पों पर जाएं और 5x तक अपने एनिमेशन को धीमा कर दें और आप वारिंग को देख पाएंगे। मेरा परीक्षण नेक्सस 6 एपीआई 22 (एमुलेटर) पर था। NestedScrollView में fitSystemWindows विशेषता को जोड़ना समस्या को हल करता है जैसा कि मैंने पहले ही उल्लेख किया है। –

+0

अभी भी डिजाइन 23.3.0 :(कोई समाधान के साथ समस्या हो रही है? – Sdghasemi

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