2016-07-07 19 views
6

मेरे पास वैश्विक एप्लिकेशन में फ़ीड डेटा की सूची है। मैं MainAcitivtyअंतिम गतिविधि में कस्टम साझा तत्व संक्रमण

// selected item event 
Intent intent = new Intent(this, DetailActivity.class); 
intent.putExtra("item_feed_index", selectedItemIndex); 
FeedViewHolder viewHolder = getViewHolderFromPosition(position); 
Pair<View, String> pair1 = Pair.create(viewHolder.imageView, "TransitionName.Feed.Image"); 
Pair<View, String> pair2 = Pair.create(viewHolder.textView, "TransitionName.Feed.Text"); 
Pair<View, String> pair3 = Pair.create(viewHolder.button, "TransitionName.Feed.Button"); 
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); 
startActivity(intent, options.toBundle()); 

में मेरी RecyclerView से एक संक्रमण बनाने के लिए इस कोड का इस्तेमाल किया यह काम करता है। लेकिन समस्या यह है कि DetailActivity में, मेरे पास एक और लंबवत सूची है, जो उपयोगकर्ता फ़ीड आइटम को सूची में बदलने के लिए नीचे/नीचे स्क्रॉल कर सकता है (जो स्क्रॉल इंडेक्स भी बदलता है)।

जब DetailActivity से वापस दबाएं, तो मैं बाहर निकलने वाली एनीमेशन संक्रमण सही देखने वाली फ़ीड इंडेक्स पर निष्पादित करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

यह onActivityResultMainActivity में कोड है, यह स्थिति को सही करने के लिए रीसायकल स्क्रॉल करता है, लेकिन निकास संक्रमण एनीमेशन सही स्थिति नहीं है।

int currentFeedIndex = Application.getInstance().getCurrentViewingFeed(); 
if (currentFeedIndex > 0 && currentFeedIndex < adapter.getItemCount()) { 
    if (gridLayoutManager != null) { 
     gridLayoutManager.scrollToPositionWithOffset(currentFeedIndex + 1, 0); 
    } 
} 

मैं जिस तरह से बाहर निकलने के एनीमेशन चलाने से पहले जोड़ी सूची को बदलने के लिए की तलाश में हूँ

अद्यतन: यहाँ DetailActivity, जहां मैं विचारों के लिए संक्रमण नाम आवंटित के लेआउट है

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/imgFeed" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:transitionName="TransitionName.Feed.Image" /> 

    <TextView 
     android:id="@+id/tvLogo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:transitionName="TransitionName.Feed.Text"/> 

    <Button 
     android:transitionName="TransitionName.Feed.Button" 
     android:id="@+id/btn" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="40dp" 
     android:layout_below="@+id/tvLogo"/> 
    </RelativeLayout> 
+1

आप कोड कैसे आप संक्रमण आवंटित किया पोस्ट कर सके 'DetailActivity' के विचारों के नाम? – rom4ek

+0

@ rom4ek मैंने कोड – R4j

उत्तर

2

फोन करने वाले गतिविधि पर:

String itemId; //set your item id here 

Intent intent = new Intent(this, DetailActivity.class); 
intent.putExtra("item_feed_index", selectedItemIndex); 
intent.putExtra("item_id", itemId); 

String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; 
String textViewTransitionName = "TransitionName.Feed.Text." + itemId; 
String buttonTransitionName = "TransitionName.Feed.Button." + itemId; 

ViewCompat.setTransitionName(viewHolder.imageView, imageViewTransitionName); 
ViewCompat.setTransitionName(viewHolder.textView, textViewTransitionName); 
ViewCompat.setTransitionName(viewHolder.button, buttonTransitionName); 

Pair<View, String> pair1 = Pair.create(viewHolder.imageView, imageViewTransitionName); 
Pair<View, String> pair2 = Pair.create(viewHolder.textView, textViewTransitionName); 
Pair<View, String> pair3 = Pair.create(viewHolder.button, buttonTransitionName); 

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); 
startActivity(intent, options.toBundle()); 

फिर आपके गंतव्य Activity में आपको itemIdIntent से प्राप्त करने की आवश्यकता है और प्रत्येक दृश्य के लिए सही संक्रमण नाम सेट करें।

String itemId = getIntent().getString("item_id"); 
String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; 
String textViewTransitionName = "TransitionName.Feed.Text." + itemId; 
String buttonTransitionName = "TransitionName.Feed.Button." + itemId; 

ViewCompat.setTransitionName(findViewById(R.id.imageView), imageViewTransitionName); 
ViewCompat.setTransitionName(findViewById(R.id.textView), textViewTransitionName); 
ViewCompat.setTransitionName(findViewById(R.id.button), buttonTransitionName); 
+0

अपडेट किया है आपको पॉइंट नहीं मिला है। 'मुख्य गतिविधि' से 'विस्तार एक्टिविटी' से एनीमेशन दर्ज करें उन संक्रमण नामों के साथ सही है। लेकिन 'DetailActivity' में, किसी अन्य आइटम पर स्विच करने के लिए व्यूअरज़र होता है (जो आइटम आईडी बदलता है)। मैं चाहता हूं कि 'DetailActivity' से' MainActivity' – R4j

+1

@ R4j पर वापस दबाए जाने पर निकास एनीमेशन के लिए नया आइटम ID अपडेट करना है, हो सकता है कि आप अपनी समस्या को समझाते हुए एक छोटा वीडियो पोस्ट कर सकें, ताकि हम आपको अंततः प्राप्त कर सकें :) – rom4ek

1

इस तरह से अपनी DetailActivity पर onBackPressed विधि ओवरराइड: इसके अलावा

@Override 
public void onBackPressed() { 
    supportFinishAfterTransition(); 
    super.onBackPressed(); 
} 

, सुनिश्चित करें कि आप पर बाहर निकलने के लिए संक्रमण निर्दिष्ट किया है अपने styles.xml

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