您的位置:首页 > 其它

使用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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: