使用Fragment实现底部菜单栏功能,并实现左右滑动切换

来源:互联网 发布:中世纪骑兵知乎 编辑:程序博客网 时间:2024/06/07 23:55

最近做android方面的东西,希望实现微信那种底部菜单栏的方式,然后可以通过左右滑动来实现切换。通过找资料然后进行整合,最后实现了这个功能,废话不多少了,下面直接上源码。这里贴出来的就是主activity的代码,其他子页面的都是相同的,就不一一贴出来,前段xml界面就是底部的几个按钮,自己随意创建几个就行了。

public class BeginActivity extends Activity implements View.OnClickListener, OnGestureListener {    //UI Object    private TextView txt_home;    private TextView txt_list;    private TextView txt_camera;    private TextView txt_local;    private TextView txt_setting;    public static GestureDetector detector;    public int MARK = 0;    final int DISTANT = 50;    //Fragment Object    private Fragment fg1, fg2, fg3, fg4, fg5;    private FragmentManager fManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_begin);        fManager = getFragmentManager();        detector = new GestureDetector(this);        bindViews();        txt_home.performClick();   //模拟一次点击,既进去后选择第一项    }    //UI组件初始化与事件绑定    private void bindViews() {        txt_home = (TextView) findViewById(R.id.txt_home);        txt_list = (TextView) findViewById(R.id.txt_list);        txt_camera = (TextView) findViewById(R.id.txt_camera);        txt_local = (TextView) findViewById(R.id.txt_local);        txt_setting = (TextView) findViewById(R.id.txt_setting);        txt_home.setOnClickListener(this);        txt_list.setOnClickListener(this);        txt_camera.setOnClickListener(this);        txt_local.setOnClickListener(this);        txt_setting.setOnClickListener(this);    }    //重置所有文本的选中状态    private void setSelected() {        txt_home.setSelected(false);        txt_list.setSelected(false);        txt_camera.setSelected(false);        txt_local.setSelected(false);        txt_setting.setSelected(false);    }    //隐藏所有Fragment    private void hideAllFragment(FragmentTransaction fragmentTransaction) {        if (fg1 != null) fragmentTransaction.hide(fg1);        if (fg2 != null) fragmentTransaction.hide(fg2);        if (fg3 != null) fragmentTransaction.hide(fg3);        if (fg4 != null) fragmentTransaction.hide(fg4);        if (fg5 != null) fragmentTransaction.hide(fg5);    }    @Override    public void onClick(View v) {        FragmentTransaction fTransaction = fManager.beginTransaction();        hideAllFragment(fTransaction);        switch (v.getId()) {            case R.id.txt_home:                setSelected();                MARK = 0;                txt_home.setSelected(true);                if (fg1 == null) {                    fg1 = new HomeActivity();                    fTransaction.add(R.id.ly_content, fg1);                } else {                    fTransaction.show(fg1);                }                break;            case R.id.txt_list:                setSelected();                MARK = 1;                txt_list.setSelected(true);                if (fg2 == null) {                    fg2 = new ListActivity();                    fTransaction.add(R.id.ly_content, fg2);                } else {                    fTransaction.show(fg2);                }                break;            case R.id.txt_camera:                setSelected();                MARK = 2;                txt_camera.setSelected(true);                if (fg3 == null) {                    fg3 = new WifiActivity();                    fTransaction.add(R.id.ly_content, fg3);                } else {                    fTransaction.show(fg3);                }                break;            case R.id.txt_local:                setSelected();                MARK = 3;                txt_local.setSelected(true);                if (fg4 == null) {                    fg4 = new LocalActivity();                    fTransaction.add(R.id.ly_content, fg4);                } else {                    fTransaction.show(fg4);                }                break;            case R.id.txt_setting:                setSelected();                MARK = 4;                txt_setting.setSelected(true);                if (fg5 == null) {                    fg5 = new SettingActivity();                    fTransaction.add(R.id.ly_content, fg5);                } else {                    fTransaction.show(fg5);                }                break;        }        fTransaction.commit();    }    @Override    public boolean onTouchEvent(MotionEvent event) {        //将该Activity上触碰事件交给GestureDetector处理        return detector.onTouchEvent(event);    }    @Override    public boolean onDown(MotionEvent arg0) {        return false;    }    /**     * 滑动切换效果的实现     */    @Override    public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,                           float arg3) {        FragmentTransaction fTransaction = fManager.beginTransaction();        hideAllFragment(fTransaction);        if (MARK == 0) {            if (arg0.getX() > arg1.getX() + DISTANT) {                setSelected();                txt_list.setSelected(true);                if (fg2 == null) {                    fg2 = new ListActivity();                    fTransaction.add(R.id.ly_content, fg2);                } else {                    fTransaction.show(fg2);                }                MARK = 1;            } else {                return false;            }        }        else if (MARK == 1) {            if (arg0.getX() > arg1.getX() + DISTANT) {                setSelected();                txt_camera.setSelected(true);                if (fg3 == null) {                    fg3 = new WifiActivity();                    fTransaction.add(R.id.ly_content, fg3);                } else {                    fTransaction.show(fg3);                }                MARK = 2;            } else if (arg1.getX() > arg0.getX() + DISTANT) {                setSelected();                txt_home.setSelected(true);                if (fg1 == null) {                    fg1 = new HomeActivity();                    fTransaction.add(R.id.ly_content, fg1);                } else {                    fTransaction.show(fg1);                }                MARK = 0;            } else {                return false;            }        }        else if (MARK == 2) {            if (arg0.getX() > arg1.getX() + DISTANT) {                setSelected();                txt_local.setSelected(true);                if (fg4 == null) {                    fg4 = new LocalActivity();                    fTransaction.add(R.id.ly_content, fg4);                } else {                    fTransaction.show(fg4);                }                MARK = 3;            } else if (arg1.getX() > arg0.getX() + DISTANT) {                setSelected();                txt_list.setSelected(true);                if (fg2 == null) {                    fg2 = new ListActivity();                    fTransaction.add(R.id.ly_content, fg2);                } else {                    fTransaction.show(fg2);                }                MARK = 1;            } else {                return false;            }        }        else if(MARK == 3){            if (arg0.getX() > arg1.getX() + DISTANT) {                setSelected();                txt_setting.setSelected(true);                if (fg5 == null) {                    fg5 = new SettingActivity();                    fTransaction.add(R.id.ly_content, fg5);                } else {                    fTransaction.show(fg5);                }                MARK = 4;            } else if (arg1.getX() > arg0.getX() + DISTANT) {                setSelected();                txt_camera.setSelected(true);                if (fg3 == null) {                    fg3 = new WifiActivity();                    fTransaction.add(R.id.ly_content, fg3);                } else {                    fTransaction.show(fg3);                }                MARK = 2;            } else {                return false;            }        }        else if(MARK == 4){            if (arg1.getX() > arg0.getX() + DISTANT) {                setSelected();                txt_local.setSelected(true);                if (fg4 == null) {                    fg4 = new LocalActivity();                    fTransaction.add(R.id.ly_content, fg4);                } else {                    fTransaction.show(fg4);                }                MARK = 3;            } else {                return false;            }        }        fTransaction.commit();        return false;    }    @Override    public void onLongPress(MotionEvent arg0) {    }    @Override    public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,                            float arg3) {        return false;    }    @Override    public void onShowPress(MotionEvent arg0) {    }    @Override    public boolean onSingleTapUp(MotionEvent arg0) {        return false;    }}

0 0