首页 > 解决方案 > 如何在单击“onbackpressed”时将动画添加到片段

问题描述

有一个Fragment,里面有一个按钮,按下下一个Fragment打开动画,但是当按钮被按下,即,返回onbackpressed上一个Fragment,但没有动画。如何在点击时添加动画onbackpressed。据我了解,您需要以某种方式为其添加onbackpressed和分配动画。那么怎么添加onbackpressedFragment

?在此处输入图像描述

Fragment我们从中经过

public class FragmentAttraction extends Fragment {

    FragmentGyro fragmentGyro;
    BlankFragment blankFragment;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_attraction, container, false);
    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {

        fragmentGyro = new FragmentGyro();
        blankFragment= new BlankFragment();

        CardView gyro = requireView().findViewById(R.id.Gyro_);


        gyro.setOnClickListener(v -> {
            FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.transition_enter, R.anim.transition_exit);
            ft.replace(R.id.fragment, blankFragment, "detailFragment");
            ft.addToBackStack(null);
            ft.commit();
        });
    }
}

我们Fragment

public class FragmentGyro extends Fragment {

    private final String[] imageUrls = new String[]{
            "https://cdn.pixabay.com/photo/2016/11/11/23/34/cat-1817970_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/12/21/12/26/glowworm-3031704_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/12/24/09/09/road-3036620_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/11/07/00/07/fantasy-2925250_960_720.jpg",
            "https://cdn.pixabay.com/photo/2017/10/10/15/28/butterfly-2837589_960_720.jpg"
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_gyro, container, false);

    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        ViewPager viewPager = requireView().findViewById(R.id.view);
        ViewPagerAdapter adapter = new ViewPagerAdapter(requireActivity(), imageUrls);
        viewPager.setAdapter(adapter);

        TextView text = requireView().findViewById(R.id.text_o);

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @SuppressLint("DefaultLocale")
            @Override
            public void onPageSelected(int position)
            {
                text.setText(String.format("%d/%d", position, 4 ));
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}

标签: androidandroid-fragmentsandroid-animation

解决方案


有两个版本setCustomAnimations()

  • 您正在使用的那个,只需要enterexit动画
  • 四个参数版本也采用 a和popEnter动画popExit- 这些是在片段弹出时运行的动画(即,当您点击后退按钮时)。
ft.setCustomAnimations(R.anim.transition_enter, R.anim.transition_exit,
    R.anim.transition_enter, R.anim.transition_exit);

推荐阅读