fragment1.xml 其余同样java
<?xml version="1.0" encoding="utf-8"?>android
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"ide
android:layout_width="match_parent"布局
android:layout_height="match_parent"this
android:gravity="center"3d
android:orientation="vertical" >orm
<TextViewxml
android:layout_width="wrap_content"对象
android:layout_height="wrap_content"blog
android:text="第一页"
android:textSize="30sp"/>
</LinearLayout>
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<View
android:id="@+id/divider"
android:layout_width="50dp"
android:layout_height="3dp"
android:background="@android:color/black"/>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="第一页"
android:clickable="true"
android:textColor="@color/btn"
android:textSize="30sp" />
<RadioButton
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:text="第二页"
android:clickable="true"
android:textColor="@color/btn"
android:gravity="center"
android:textSize="30sp" />
<RadioButton
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:text="第三页"
android:clickable="true"
android:textColor="@color/btn"
android:gravity="center"
android:textSize="30sp" />
</RadioGroup>
</LinearLayout>
Fragment1.java
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, null);
}
}
代码实现
public class MainActivity extends FragmentActivity {
private View line;// 指示线
private int screenWidth;// 屏幕的宽度
private ViewPager viewpager;
private RadioGroup radioGroup;
private RadioButton btn1,btn2,btn3;
private FragmentTransaction fragmentTransaction;
private List<Fragment> fragmentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化界面
viewpager = (ViewPager) findViewById(R.id.viewpager);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
btn1 = (RadioButton) findViewById(R.id.btn1);
btn2 = (RadioButton) findViewById(R.id.btn2);
btn3 = (RadioButton) findViewById(R.id.btn3);
line = findViewById(R.id.divider);
// 获取片断管理器
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
// 界面显示时 默认按钮1被选择及显示第一个界面
btn1.setChecked(true);
fragmentTransaction.replace(R.id.viewpager, new Fragment1()).commit();
// fragmentList用于存放片断 及 将片断添加进集合
fragmentList = new ArrayList<Fragment>();
Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();
Fragment fragment3 = new Fragment3();
fragmentList.add(fragment1);
fragmentList.add(fragment2);
fragmentList.add(fragment3);
// 获取屏幕的宽度
DisplayMetrics outMetrics = new DisplayMetrics();
getWindow().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
screenWidth = outMetrics.widthPixels;
// 设置指示线的宽度 获取控件的(注意:必定要用父控件的LayoutParams写LinearLayout.LayoutParams)
LinearLayout.LayoutParams lp = (LayoutParams) line.getLayoutParams();// 获取控件的布局参数对象
lp.width = screenWidth / fragmentList.size();
line.setLayoutParams(lp);// 设置该控件的layoutParams参数
// 对viewPager设置适配器FragmentPagerAdapter
viewpager.setAdapter(new MyFragmentPagerAdapter(fragmentManager,fragmentList));
// 对按钮设置监听 RadioButton切换Fragment
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.btn1:
viewpager.setCurrentItem(0, true);
break;
case R.id.btn2:
viewpager.setCurrentItem(1, true);
break;
case R.id.btn3:
viewpager.setCurrentItem(2, true);
break;
}
}
});
// 对viewpager设置监听 viewpager切换fragment radiobutton作相应的改变
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
// 当新的页面被选中时调用
@Override
public void onPageSelected(int position) {
// ((RadioButton)radioGroup.getChildAt(position)).performClick();
switch (position) {
case 0:
radioGroup.check(R.id.btn1);
break;
case 1:
radioGroup.check(R.id.btn2);
break;
case 2:
radioGroup.check(R.id.btn3);
break;
}
}
/**
* 当前页面被滑动时调用 position:当前页面 positionOffset:当前页面偏移的百分比
* positionOffsetPixels:当前页面偏移的像素位置
*/
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
LinearLayout.LayoutParams lp = (LayoutParams) line.getLayoutParams();
// 获取组件距离左侧组件的距离
lp.leftMargin = (int) ((positionOffset + position)* lp.width);
line.setLayoutParams(lp);
}
/**
* 当滑动状态改变时调用 state=0的时候表示什么都没作,就是停在那 state=1的时候表示正在滑动
* state==2的时候表示滑动完毕了
*/
@Override
public void onPageScrollStateChanged(int state) {
}
});
private class MyFragmentPagerAdapter extends FragmentPagerAdapter { List<Fragment> list; public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) { super(fm); this.list = list; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }