片段添加动画播放时禁用点击 [英] Disable clicks when fragment adding animation playing

查看:83
本文介绍了片段添加动画播放时禁用点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个方法,该方法执行添加动画的片段,新片段填充整个屏幕:

I have a method, which perform a fragment adding animation and a new fragment fills all screen:

public void addFragmentWithAnimation(Fragment fragment, boolean addToBackStack){
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, R.anim.slide_in_left, R.anim.slide_out_right);
    if (addToBackStack) {
        transaction.addToBackStack(null);
    }
    transaction.add(R.id.lay_fragments, fragment);
    commitTransaction(transaction);
}

但是当动画播放用户仍然允许单击下面视图上的按钮并执行另一个ui操作时,这可能会导致不可预测的结果.有什么方法可以阻止应用中的所有用户操作,直到动画结束?

But when animation playing user still allowed to click on buttons on the view below and make another ui actions, which could cause to unpredictable results. Is there an any way to block all user actions in app, until the end of animation?

推荐答案

由于@yedidyak建议我将侦听器添加到片段动画中,如下所示:在基本父片段中:

As @yedidyak suggest i added listener to fragment animation as follows: In base parent fragment:

 @Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    Animation animation;
    if (nextAnim == 0 ){
        animation = super.onCreateAnimation(transit, enter, nextAnim);
    } else {
        animation = AnimationUtils.loadAnimation(getActivity(), nextAnim);
        animation.setAnimationListener(new Animation.AnimationListener() {
            public void onAnimationStart(Animation animation) {}
            public void onAnimationRepeat(Animation animation) {}

            public void onAnimationEnd(Animation animation) {
                getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
                // additional functionality
            }
        });
    }
    return animation;
}

在活动中添加片段方法,我添加了代码来阻止用户触摸事件:

In activity add fragment method i added code to block user touch events:

public void addFragmentWithAnimation(Fragment fragment, boolean addToBackStack, @MagicConstant FragmentAnimation animation){
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
    FragmentTransaction transaction = ...
}

在代码的片段事务部分中添加了FLAG_NOT_TOUCHABLE,因为用户可以在它与onAnimationStart调用之间分派一些事件.

FLAG_NOT_TOUCHABLE was added in fragment transaction part of code because user can dispatch some events between it and onAnimationStart call.

如果有人知道一个简单的方法,将不胜感激.

If somebody knows a simplier way, it will be appreciate.

这篇关于片段添加动画播放时禁用点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆