//MainActivity
public class MainActivity extends AppCompatActivity {
private String[] pindao = new String[]{
"关注", "热点", "推荐", "北京", "视频", "社会", "少儿频道", "农业频道", "电影频道", "CCTV"
};
private HorizontalScrollView scrollView;
private LinearLayout ll;
private List<Fragment> fs = new ArrayList<>();
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化界面
initViews();
//初始化数据 ,根据频道数量,添加子控件
initDatas();
}
private void initDatas() {
for (int i = 0; i < pindao.length; i++) {
//创建子控件
final TextView t = new TextView(MainActivity.this);
t.setText(pindao[i]);
t.setTextSize(20);
t.setGravity(Gravity.CENTER);
t.setPadding(10, 0, 10, 0);
//添加的时候,需要有个索引,方便以后处理页面切换
ll.addView(t, i);
//添加点击事件
final int finalI = i;
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int j = 0; j < pindao.length; j++) {
if (j == finalI) {
TextView textView = (TextView) ll.getChildAt(j);
textView.setTextSize(25);
textView.setTextColor(Color.RED);
} else {
TextView textView = (TextView) ll.getChildAt(j);
textView.setTextSize(20);
textView.setTextColor(Color.BLACK);
}
}
//切换 相应的Fragment
viewPager.setCurrentItem(finalI);
}
});
//添加Fragment
Fragment fragment = MyFragment.createFragment(pindao[i]);
fs.add(fragment);
}
//默认第一选中,也就是字体是红色
TextView tv = (TextView) ll.getChildAt(0);
tv.setTextSize(25);
tv.setTextColor(Color.RED);
//设置适配器
MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager());
viewPager.setAdapter(myAdapter);
//viewpager的滑动监听
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//每次滑动ViewPager 频道栏,就应该滑动相应的距离
TextView textView = (TextView) ll.getChildAt(position);
int width = textView.getMeasuredWidth();
scrollView.scrollTo(width, 0);
for (int i = 0; i < pindao.length; i++) {
if (i == position) {
textView.setTextColor(Color.RED);
textView.setTextSize(25);
} else {
TextView textView1 = (TextView) ll.getChildAt(i);
textView1.setTextColor(Color.BLACK);
textView1.setTextSize(20);
}
}
//处理第一个和最后一个
if (position == 0) {
scrollView.scrollTo(0, 0);
}
if (position == (pindao.length - 1)) {
int width1 = ll.getMeasuredWidth() - ll.getChildAt(position).getMeasuredWidth();
scrollView.scrollTo(width1, 0);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//适配器
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fs.get(position);
}
@Override
public int getCount() {
return fs.size();
}
}
private void initViews() {
scrollView = findViewById(R.id.hsv);
ll = findViewById(R.id.ll);
viewPager = findViewById(R.id.viewPager);
}
}
//Fragment
public class MyFragment extends Fragment {
private static final String KEY = "title";
private String title;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//接受参数
Bundle arguments = getArguments();
title = arguments.getString(KEY);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView = new TextView(getContext());
textView.setText(title);
return textView;
}
//静态方法
public static Fragment createFragment(String title) {
Bundle bundle = new Bundle();
bundle.putString(KEY, title);
Fragment f = new MyFragment();
f.setArguments(bundle);
return f;
}
}
//布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<HorizontalScrollView
android:id="@+id/hsv"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="center"
android:scrollbars="none">
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"></LinearLayout>
</HorizontalScrollView>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></android.support.v4.view.ViewPager>
</LinearLayout>