2015-10-31 7 views
5

के बाद नहीं कहा जाता है मेरे पास एक साझा साझा ऑब्जेक्ट, ImageView के साथ दो गतिविधियां हैं। दोनों गतिविधियों AppCompatActivity की उपवर्गों कर रहे हैं और वे एक ही विषय का हिस्सा:onEnterAnimationComplete() को गतिविधि लेनदेन

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowActionBar">false</item> 
    <item name="android:windowContentTransitions">true</item> 
    <item name="android:windowTranslucentStatus">false</item> 
    <item name="android:windowExitTransition">@transition/transition_slide</item> 
    <item name="android:windowEnterTransition">@transition/transition_slide</item> 
    <!-- specify shared element transitions --> 
    <item name="android:windowSharedElementEnterTransition"> 
     @transition/obj_transition</item> 
    <item name="android:windowSharedElementExitTransition"> 
     @transition/obj_transition</item> 
</style> 

गतिविधि एक निम्नलिखित तरीके से गतिविधि बी कॉल:

Intent intent = new Intent(ActivityA.this, ActivityB.class); 
ActivityOptionsCompat options = ActivityOptionsCompat 
    .makeSceneTransitionAnimation(ActivityA.this, view, "common_tag"); 
ActivityCompat 
    .startActivityForResult(ActivityA.this, intent, ACT_B_TAG, options.toBundle()); 

गतिविधि बी पर, मैं पर एक साधारण wobbling एनीमेशन शुरू करना चाहते हैं वही साझा छवि दृश्य। अगर मैं onCreate विधि पर एनीमेशन शुरू करता हूं, तो परिणाम काफी बदसूरत है क्योंकि यह गतिविधि संक्रमण के अंत से पहले शुरू होता है। इसलिए मैं गतिविधि बी में onEnterAnimationComplete() विधि के ऊपर लिख:

@Override 
public void onEnterAnimationComplete() { 
    Log.d(TAG, "ANIMATION COMPLETE"); 
    Animation anim = AnimationUtils.loadAnimation(this, R.anim.wobble); 
    findViewById(R.id.SharedView).startAnimation(anim); 
} 

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

उत्तर

0

इसके लिए एक कामकाज है। आप गतिविधि प्रविष्टि संक्रमण को स्थगित कर सकते हैं, अपनी छवि में एक प्रीड्रा श्रोता जोड़ें (या जो भी हो, यह आपके ऊपर है), अपने एनिमेशन सेट करें, और फिर स्थगित प्रविष्टि संक्रमण शुरू करें।

postponeEnterTransition(); // wait until all animations are set up 
imageView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      @Override 
      public boolean onPreDraw() { 
       imageView.getViewTreeObserver().removeOnPreDrawListener(this); // only run once 
       enterAnimation(); // your animations here 
       startPostponedEnterTransition(); // all animations are ran 

       return true; 
      } 
     }); 

मैं नहीं जानता कि यदि onEnterAnimationComplete() व्यवहार करना है कहा जाता हो रही है नहीं, लेकिन अगर यह तो है इस ढांचे टीम की ओर से एक बड़ा निरीक्षण है।

+0

यह एक प्रासंगिक तो सवाल यह हो रहा है। http://stackoverflow.com/questions/39488410/onenteranimationcomplete-not-called-api-21 – Kiki

0

मैंने कोड का परीक्षण किया है और यह पूरी तरह से काम कर रहा है।

गतिविधि बी पर नेविगेट करने के लिए मुख्य गतिविधि में एक बटन जोड़ें। ActivityB की

public class MainActivity extends AppCompatActivity { 

private Button button; 

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

    button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(), ActivityB.class); 
      startActivity(intent); 
     } 
    }); 
} 

अवहेलना एनीमेशन को समझने के लिए ठीक से

public class ActivityB extends AppCompatActivity { 

private TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    overridePendingTransition(R.anim.slide_in_up, R.anim.still); 
    setContentView(R.layout.activity_b); 

    textView = (TextView) findViewById(R.id.textView); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    overridePendingTransition(R.anim.still, R.anim.slide_out_down); 
} 

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

@Override 
public void onEnterAnimationComplete() { 
    super.onEnterAnimationComplete(); 
    Toast.makeText(this, "Animation Completed", Toast.LENGTH_SHORT).show(); 
    Animation anim = AnimationUtils.loadAnimation(this, R.anim.rotate_clockwise); 
    textView.startAnimation(anim); 
} 

slide_in_up.xml

<translate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromYDelta="100%" 
    android:toYDelta="0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:duration="3000" /> 

slide_out_down.xml

<translate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromYDelta="0" 
    android:toYDelta="100%" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:duration="3000" /> 

still.xml

0,123,
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromYDelta="0%" 
    android:toYDelta="0%" 
    android:duration="3000" /> 

rotate_clockwise.xml

<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="0" 
    android:toDegrees="180" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="3000"/> 

enter image description here

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