使用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
- 使用Fragment实现底部菜单栏功能,并实现左右滑动切换
- 使用Fragment实现底部菜单栏
- 使用Fragment实现底部菜单栏
- Fragment实现底部菜单栏
- Fragment实现底部菜单栏
- Fragment实现底部菜单栏
- 底部菜单栏(二)使用Fragment实现底部菜单栏
- Viewpager+Fragment实现左右滑动切换页面
- Android 使用Fragment实现底部菜单栏
- android使用ViewPager实现底部菜单栏和左右滑动效果,加载多个Activity
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- HTML5菜单栏切换实现底部滑块滑动效果实现
- 使用ViewPager和Fragment同时实现点击底部Tab切换和手势滑动切换Fragment
- Fragment实现底部菜单栏以及选项卡之间的切换
- FragmentTabHost+Fragment实现底部菜单栏
- Fragment+FragmentTabHost实现底部菜单栏
- BottomNavigationView+fragment 实现底部菜单栏
- Fragment+FragmentTabHost实现底部菜单栏
- Python collections模块实例讲解
- packet_forwarder Use with Raspberry Pi
- 2017百度前端编程 敏感词汇 字符串替换
- (四)2进程调度的相关概念
- LaTeX(使用TexStudio)创建参考文献的方法
- 使用Fragment实现底部菜单栏功能,并实现左右滑动切换
- js onclick方法 传递json对象报错
- 判断tcp 是否正常连接
- java 四大特征(3)
- (四)3抢占和上下文切换
- Fedora系统安装MySQL后死活无法启动的问题
- 263. Ugly Number
- 《JavaScript高级程序设计》总结二
- [LeetCode]Reverse Integer