Android——Fragment中通过给每个Fragment设置开场动画进入

来源:互联网 发布:网络流行用语2017 编辑:程序博客网 时间:2024/05/21 00:46

在Fragment中为每一个Fragment制作一个splash开场动画。

先来做一个通用的splashFragment:

public class SplashFragment extends BaseFragment implements AnimationListener {    private static final String BUNDLE_SPLASH = "splash";    private static final String BUNDLE_FRAGMENT = "fragment";    private AnimationSet set;    private LinearLayout layout;    private FragmentManager fm;    private Fragment[] fragments=new Fragment[4];    private int fragment_id;    @Override    public void initViews() {        // TODO Auto-generated method stub        layout=(LinearLayout) find(R.id.splashfragment_layout);    }    @Override    public void initListeners() {        // TODO Auto-generated method stub    }    public SplashFragment newInstance(int layout,int whichfragment) {        SplashFragment fragment = new SplashFragment();        Bundle bundle = new Bundle();        bundle.putInt(BUNDLE_SPLASH, layout);        bundle.putInt(BUNDLE_FRAGMENT, whichfragment);        fragment.setArguments(bundle);        return fragment;    }    @Override    public void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        fm=getFragmentManager();        fragments[0]=new MovieFragment();        fragments[1]=new RobotFragment();        fragments[2]=new WuZiQiFragment();        fragments[3]=new LOLFragment();    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        // TODO Auto-generated method stub        Bundle bundle = getArguments();        fragment_id=bundle.getInt(BUNDLE_FRAGMENT);        return inflater.inflate(bundle.getInt(BUNDLE_SPLASH), null);    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onActivityCreated(savedInstanceState);        init();        set=(AnimationSet) AnimationUtils.loadAnimation(getActivity(),R.anim.splash_fragment);        layout.setAnimation(set);        set.setAnimationListener(this);    }    @Override    public void onAnimationStart(Animation animation) {        // TODO Auto-generated method stub    }    @Override    public void onAnimationEnd(Animation animation) {        // TODO Auto-generated method stub        fm.beginTransaction().replace(R.id.main_fragment, fragments[fragment_id]).commit();    }    @Override    public void onAnimationRepeat(Animation animation) {        // TODO Auto-generated method stub    }}

在主Activity中只需要先调用此Fragment:

changeFragment(new SplashFragment().newInstance(R.layout.fragment_splash_movie, 0));private void changeFragment(Fragment targetFragment) {        getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment, targetFragment).commit();    }

这样就达到一个Fragment给多个Fragment设置开场动画。

原创粉丝点击