2016-03-21 11 views
1

我的目標是在片段之間創建片段之間的內容切換,其中將Fade()和Slide()應用於片段中的一個視圖。在執行轉換時(在這種情況下爲exitTransition),視覺效果不是視圖同時滑動和淡入淡出,而是視圖重複,一個副本滑動,另一個副本消失。將transitionSet應用於片段中的單個視圖內容轉換會產生重複的視圖效果

一些代碼:

Fragment currentFragment = getSupportFragmentManager().getFragments().get(0); 
Fragment fragment = EmailSearchFragment.newInstance(); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    fragment.setEnterTransition(new Slide(Gravity.RIGHT)); 
    currentFragment.setExitTransition(TransitionInflater.from(this).inflateTransition(R.transition.slide_and_fade));    
} 

getSupportFragmentManager() 
    .beginTransaction() 
    .replace(R.id.fragment_container, fragment) 
    .addToBackStack(null) 
    .commit(); 

這裏過渡:

public class DetailsTransition extends TransitionSet { 
    public DetailsTransition() { 
     init(); 
    } 

    /** 
    * This constructor allows us to use this transition in XML 
    */ 
    public SlideAndFadeTransitionSet(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    private void init() { 
     setOrdering(ORDERING_TOGETHER); 
     addTransition(new Fade()). 
     addTransition(new Slide(Gravity.TOP)); 
    } 
} 

而且,這裏的XML針對一個單一視圖過渡:

<?xml version="1.0" encoding="utf-8"?> 
<transition xmlns:android="http://schemas.android.com/apk/res/android" class="com.adidas.connect.app.transition.DetailsTransition"> 
    <targets> 
     <target android:targetId="@id/social_buttons"/> 
    </targets> 
</transition> 

我也曾嘗試要使用XML中的轉換集,但我得到了相同的結果,所以我將轉換集移到了新的類t中o確保針對單個視圖的xml語法沒有問題。

有沒有人做這個工作?

在此先感謝!

回答

1

作爲一種變通方法,我創建了自己CustomTransitions其中兩個作用,其中適用於:

public class Stack extends Visibility { 

    public Stack(Context context, AttributeSet attributteSet) { 
     super(context, attributteSet); 
    } 

    @Override 
    public Animator onDisappear(ViewGroup sceneRoot, View view, 
           TransitionValues startValues, TransitionValues endValues) { 
     if (startValues == null) { 
      return null; 
     } 

     Animator slideTop = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, 0, -sceneRoot.getHeight()); 
     Animator fadeOut = ObjectAnimator.ofFloat(view, View.ALPHA, 1, 0); 

     AnimatorSet animSet = new AnimatorSet(); 
     animSet.play(slideTop) 
       .with(fadeOut); 

     return animSet; 
    } 

    @Override 
     public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) { 
     ... 
    } 
} 

現在,它的工作。