- 实现了底部导航动画切换的效果 使用了viewpage+fragment +RadioGroup
public class MainActivity extends AppCompatActivity implements
RadioGroup.OnCheckedChangeListener {
private ArrayList<Fragment> fragmentList;
//这里只需要声明一个数组就可以了
private Button indexTable,taskTable,userTable;
private RadioGroup mGroup;
private ViewPager vp;`在这里插入代码片`
private OneFragment oneFragment;
private TwoFragment twoFragment;
private ThreeFragment threeFragment;
private FragmentAdapter mFragmentAdapter;`在这里插入代码片`
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initViewPager();
}
/**
* 初始化布局View
*/
private void initViews() {
indexTable = (Button) findViewById(R.id.today_tab);
taskTable = (Button) findViewById(R.id.record_tab);
userTable = (Button) findViewById(R.id.contact_tab);
mGroup=(RadioGroup)findViewById(R.id.tabs_rg);
mGroup.setOnCheckedChangeListener(this);
vp = (ViewPager) findViewById(R.id.mainViewPager);
} private void initViewPager(){
oneFragment = new OneFragment();
twoFragment = new TwoFragment();
threeFragment = new ThreeFragment();
fragmentList=new ArrayList<Fragment>();
//给FragmentList添加数据
fragmentList.add(oneFragment);
fragmentList.add(twoFragment);
fragmentList.add(threeFragment);
mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(), fragmentList); //
vp.setOffscreenPageLimit(3);//ViewPager的缓存为3帧
vp.setAdapter(mFragmentAdapter);
vp.setCurrentItem(0);//初始设置ViewPager选中第一帧
vp.addOnPageChangeListener(new MyOnPageChangeListener()); }
public class FragmentAdapter extends FragmentPagerAdapter {
List<Fragment> fragmentList = new ArrayList<Fragment>();
**//这里和一开始申明的并不是一个东西 所以此处是申明一个fragment类型的实列
所以很多文章一开始这么声明其实是不对的 这样会让编译器报一个错 告诉你没有必要声明一个这样的类型**
public FragmentAdapter(FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList=fragmentList;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
switch (i){
case 0:
mGroup.check(R.id.today_tab);
break;
case 1:
mGroup.check(R.id.record_tab);
break;
case 2:
mGroup.check(R.id.contact_tab);
break;
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i) {
case R.id.today_tab:
//ViewPager显示第一个Fragment且关闭页面切换动画效果
vp.setCurrentItem(0,true);
break;
case R.id.record_tab:
vp.setCurrentItem(1,true);
break;
case R.id.contact_tab:
vp.setCurrentItem(2,true);
break;
}
} }
xml文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--<android.support.v4.view.ViewPager-->
<!--android:id="@+id/fragment_vp"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:layout_above="@+id/tabs_rg" />-->
<android.support.v4.view.ViewPager
android:id="@+id/mainViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<RadioGroup
android:id="@+id/tabs_rg"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:background="@drawable/top_solid"
android:orientation="horizontal">
<RadioButton
android:id="@+id/today_tab"
style="@style/Custom.TabRadioButton"
android:checked="true"
android:drawableTop="@drawable/tab_sign_selector"
android:text="首页" />
<RadioButton
android:id="@+id/record_tab"
style="@style/Custom.TabRadioButton"
android:drawableTop="@drawable/tab_record_selector"
android:text="任务" />
<RadioButton
android:id="@+id/contact_tab"
style="@style/Custom.TabRadioButton"
android:drawableTop="@drawable/tab_contact_selector"
android:text="我的" />
</RadioGroup>
fragment文件没什么特别
public class FourFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.one_item, container, false);
}
}