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

最近做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;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值