首页 > 解决方案 > 浮动动作按钮动画仅在第一次单击时起作用

问题描述

fab antimation 仅在我第一次单击时起作用。之后,当我单击按钮时,单击侦听器可以正常工作并显示工厂但没有动画。我正在片段上创建它。mAddFab是显示其他工厂的主要按钮mRequestFabmDonateFab是在单击按钮后显示的mAddFab按钮。告诉我是否需要动画文件

 public class NameFragment extends Fragment {
    
        private FloatingActionButton mAddFab, mRequestFab, mDonateFab;
    
        private Animation mFabOpenAnim, mFabCloseAnim, rotateOpen, rotateClose;
    
        private boolean isOpen;
        private Context context;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            context = getContext();
    
            super.onCreate(savedInstanceState);
    
    
            mFabOpenAnim = AnimationUtils.loadAnimation(context, R.anim.fab_open_anim);
            mFabCloseAnim = AnimationUtils.loadAnimation(context, R.anim.fab_close_anim);
            rotateOpen = AnimationUtils.loadAnimation(context, R.anim.rotate_open_anim);
            rotateClose = AnimationUtils.loadAnimation(context, R.anim.rotate_close_anim);
    
            isOpen = false;
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            final View view = inflater.inflate(R.layout.fragment_plasma, container, false);
            RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
            RecyclerViewAdapter adapter = new RecyclerViewAdapter();
            recyclerView.setAdapter(adapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(context));
    
            mAddFab = view.findViewById(R.id.addbtn);
            mRequestFab = view.findViewById(R.id.requestbtn);
            mDonateFab = view.findViewById(R.id.donatebtn);
    
            mAddFab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    if(isOpen){
                        mAddFab.setAnimation(rotateClose);
                        mRequestFab.setAnimation(mFabCloseAnim);
                        mDonateFab.setAnimation(mFabCloseAnim);
    
    
                        mRequestFab.setVisibility(View.INVISIBLE);
                        mDonateFab.setVisibility(View.INVISIBLE);
    
                        isOpen = false;
                    } else {
                        mAddFab.setAnimation(rotateOpen);
                        mDonateFab.setAnimation(mFabOpenAnim);
                        mRequestFab.setAnimation(mFabOpenAnim);
    
                        mDonateFab.setVisibility(View.VISIBLE);
                        mRequestFab.setVisibility(View.VISIBLE);
    
                        isOpen = true;
                    }
    
                }
            });
            return view;
        }
    }

标签: androidanimationfloating-action-button

解决方案


我找到了解决方案。问题出在我用来制作动画的功能上,我用 .setAnimation()更改了它startAnimation()。这两个功能之间的主要区别是 -

设置动画-

当视图被添加到 viewGroup 时,动画将被调用,当视图被添加时,动画将不会被调用

开始动画-

即使添加了视图,动画也会一直被调用。


推荐阅读