【问题标题】:Is there any way to know when animation is finished in FragmentTransactions有什么方法可以知道片段事务中的动画何时完成
【发布时间】:2012-10-05 15:03:38
【问题描述】:
FragmentTransaction t = getFragmentManager().beginTransaction() ;
            //left to right
            t.setCustomAnimations(R.anim.left_to_right, R.anim.left_to_right_out);

我在 FragmentTransaction 中有一个动画。 有什么方法可以知道动画何时完成或任何animationListener 类似物?

【问题讨论】:

标签: android animation android-fragments


【解决方案1】:

我从未使用过 Fragments,但我曾经遇到过类似的 scrollView 问题。我想知道卷轴什么时候结束。您可能会做的事情是实现自己的侦听器。您可以创建一个可运行对象 (animationTask) 并让该可运行对象检查是否满足某些条件以确定动画是否已结束,如果没有,请继续调用可运行对象。

为此,您需要创建自己的 FragmentTransaction 类来扩展 FragmentTransaction 并声明一个接口(这将是您的侦听器)。

public abstract class M_FragmentTransaction extends FragmentTransaction {
private Runnable animationTask;
public interface OnAnimationFinish{
    void onAnimationStopped();
}

private OnAnimationFinish onAnimationFinishListener;

public M_FragmentTransaction() {
    super();
    animationTask = new Runnable() {

        public void run() {

            while(!SOMETHING_TO_DETERMINE_IF_HAS_STOPPED){//has stopped

                if(onAnimationFinishListener!=null){

                    onAnimationFinishListener.onAnimationStopped();
                }
            }
        }
    };
}

public void setOnAnimationFinish(OnAnimationFinish listener){
    onAnimationFinishListener = listener;
}

public void startAnimationStart(){

    animationTask.run();
}

现在,在您发布的代码中,您必须考虑转换从 getFragmentManager().beginTransaction(); 返回的 FragmentTransaction;进入 M_FragmentTransaction 因为你不能做 child = parent。我不太确定这是否比它的价值更麻烦,但这种方法帮助我解决了我的问题。

希望这会有所帮助!

【讨论】:

  • 如果事务是由 FragmentManager 创建的,我应该如何创建自己的事务?你的代码阻塞了 UI 线程我很确定根本不会有动画。我知道动画的持续时间,我不想猜测动画是否完成,我需要某种回调或类似的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多