使用Fragment实现底部菜单栏功能,并实现左右滑动切换
2016-09-20 19:27
405 查看
最近做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; } }
相关文章推荐
- java编程思想(四)总结
- LaTeX(使用TexStudio)创建参考文献的方法
- (四)2进程调度的相关概念
- Python collections模块实例讲解
- spring + ibatis 多数据源事务(分布式事务)管理配置方法(转)
- ibatis,Spring 使用annotation整合配置
- npm 重点小结
- Back to openGL!
- 不容易系列之(3)—— LELE的RPG难题(HDU2045)
- 2017百度前端编程 敏感词汇 字符串替换
- 100天土鸡饲养计划(50)
- packet_forwarder Use with Raspberry Pi
- R语言----绘图学习笔记之Scatter plots
- 实用sql语句拾零
- Hibernate的事物机制
- (四)1进程管理的相关概念
- Qt实现菜单栏,工具栏,状态栏
- Java之——数字金额转化为英文金额
- 调优 java之jstack
- 弹出dialog样式的activity