2016-03-21 50 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) { 
     ... 
    } 
} 

现在,它的工作。