2017-07-28 104 views
2

我试图从支持库中使用TransitionManager.beginDelayedTransition()来延迟转换。使用Transitions框架延迟动画

我想使用AutoTransition使LinearLayout出现/消失。该动画完美如预期,但不会延迟。

TransitionManager.beginDelayedTransition(rootViewGroup, new AutoTransition().setStartDelay(1000)); 
linearLayout.setVisibility(View.VISIBLE); 

linearLayout是当然的rootViewGroup的层次结构。

+1

打开了一个机票https://issuetracker.google.com/issues/64139005 –

回答

0

我做了一些测试,但不幸的是我也无法使它工作。它看起来像setStartDelay只适用于ChangeBounds过渡。

请看下面的例子(当您将在first过渡startDelay,延迟将无法正常工作):

linearLayout = (LinearLayout) findViewById(R.id.testLinearLayout); 
mSceneRoot = (ViewGroup) findViewById(R.id.rootView); 
mStaggeredTransition = new TransitionSet(); 

Transition first = new Fade(Fade.OUT); 
Transition second = new ChangeBounds(); 
Transition third = new Fade(Fade.IN); 
second.setStartDelay(1000).addTarget(linearLayout); 

mStaggeredTransition.setOrdering(ORDERING_SEQUENTIAL); 
mStaggeredTransition.addTransition(first).addTransition(second).addTransition(third); 

findViewById(R.id.testbutton).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     linearLayout.setVisibility(View.GONE); 
     TransitionManager.beginDelayedTransition(mSceneRoot, mStaggeredTransition); 
     linearLayout.setVisibility(View.VISIBLE); 
     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) linearLayout.getLayoutParams(); 
     params.addRule(ALIGN_PARENT_END); 
     linearLayout.setLayoutParams(params); 
    } 
}); 

所以我建议你使用这样的:

mSceneRoot.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      TransitionManager.beginDelayedTransition(rootViewGroup, new AutoTransition().setStartDelay(1000)); 
      linearLayout.setVisibility(View.VISIBLE); 
     } 
    }, 1000); 
+0

我不想使用'Handler',因为我必须处理潜在的内存泄漏......但看起来像是要走的路。谢谢Jordy –