मैं एंड्रॉइड लॉलीपॉप की नई गतिविधि संक्रमण का उपयोग करना चाहता हूं। लेकिन वर्तमान में मैं एनिमेशन के दौरान बहुत अजीब hickups देख रहा हूँ। मैंने एक छोटे से नमूने को एक साथ हैक किया जिसे मैं सोच सकता था।साझा तत्वों के साथ गतिविधि संक्रमण में हिचकी
- सक्षम मेरी
styles.xml
- में विंडो की सामग्री को संक्रमण मेरी शैली
- में एक बहुत ही सरल
slide.xml
बाहर निकलने के संक्रमण के रूप में संदर्भित परंतु एक के लिए एकandroid:transitionName
:यह वही है मैं एक बहुत ही लघु संस्करण में किया था है दोनों लेआउट में साझा तत्व
- उस नाम के साथ
ActivityOptions.makeSceneTransitionAnimation()
पर कॉल किया गया और दृश्य मैं - Pa साझा करना चाहता हूं
startActivity()
के परिणामस्वरूप बंडल ssed यह वह जगह है व्यवहार मैं देख रहा हूँ (देखने के लिए मैं क्या मतलब है की कोशिश 10x धीमी गति एनीमेशन): सही से पहले स्लाइड एनीमेशन देखा गया है कि साझा नहीं कर रहे हैं नीचे स्लाइड, उन दृश्यों नीचे कूद थोड़ा सा। वे वास्तव में थोड़ा अलग स्थानांतरित करते हैं।
लेकिन: यह केवल दूसरा होता है जब मैं उस एनीमेशन (और हर बार बाद में) चलाता हूं। पहला पास बस ठीक दिखता है। और यह भी तब होता है जब मैं अगली गतिविधि के साथ तत्व साझा करना चाहता हूं। अगर मैं तत्व साझा करने की कोशिश नहीं करता तो सब ठीक काम करता है।
मूल्यों/styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
<!-- enable window content transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- specify exit transition -->
<item name="android:windowExitTransition">@transition/slide</item>
</style>
</resources>
संक्रमण/slide.xml मुख्य गतिविधि
के लिए<slide />
लेआउट:
यहाँ मेरी कोड है
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000ff" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000ff" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00" />
</LinearLayout>
<!-- the actual element I want to share -->
<View
android:id="@+id/view"
android:layout_width="56dp"
android:layout_height="56dp"
android:background="#ff0000"
android:elevation="8dp"
android:transitionName="view" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity implements View.OnClickListener {
View mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mView = findViewById(R.id.view);
mView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mView, "view");
Intent intent = new Intent(this, SecondaryActivity.class);
startActivity(intent, options.toBundle());
}
}
आपके द्वारा साझा किए गए तत्व संक्रमण के लिए उपयोग किया जाने वाला कोड कहां है? मैं देखता हूं कि आपने अपनी शैली में 'windowExitTransition' निर्दिष्ट किया है, लेकिन आप' windowSharedElementExitTransition' को कैसे सेट कर रहे हैं? साथ ही, आपका दूसरा गतिविधि लेआउट कोड कैसा दिखता है? –
साथ ही, क्या वही व्यवहार होता है यदि आप अपने गैर-साझा दृश्यों को निश्चित ऊंचाइयों (अपनी पहली गतिविधि के लेआउट एक्सएमएल में प्रत्येक दृश्य के लिए 'लेआउट_वेट = "1" 'सेट करने के बजाय' –
'को निर्दिष्ट नहीं करते हैं, तो हम कस्टम' विंडोश्रेड एलिमेंट एक्स्टिट ट्रांसिशन 'निर्दिष्ट नहीं करते हैं। इसलिए हम विषयों को डिफ़ॉल्ट रूप से उपयोग कर रहे हैं। साझा तत्वों में पहले से ही दोनों लेआउट में एक निश्चित आकार है। – Greeny