//所有的菜单内容
private List<String> menus=new ArrayList<>();
private HorizontalScrollView hsv;
private LinearLayout linMenu;
private List<TextView> listMenus;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hsv = findViewById(R.id.hsv);
linMenu = findViewById(R.id.linmenu);
viewPager = findViewById(R.id.vp);
//初使化
initMenus();
addMenus();
//设置适配器
MyAdapter myAdapter=new MyAdapter(getSupportFragmentManager());
viewPager.setAdapter(myAdapter);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//position:当前页面的下标
@Override
public void onPageSelected(int position) {
//设置选中的菜单
setSelectMenu(position);
//设置横向滚动条滚动
setHsvScorll(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//设置HorizontalScrollView 滚动
private void setHsvScorll(int menuIndex){
//得到对应的菜单textview
TextView textView = listMenus.get(menuIndex);
//得到它的坐标
float x = textView.getX();
//滚动
hsv.scrollTo((int)x,0);
}
//定义viewPager的适配器
class MyAdapter extends FragmentPagerAdapter{
public MyAdapter(FragmentManager fm) {
super(fm);
}
//用来返回每个页面
@Override
public Fragment getItem(int position) {
Log.d("zzz","getItem:"+position);
//传值
ContentFragment contentFragment=new ContentFragment();
Bundle bundle=new Bundle();
bundle.putString("key",menus.get(position));
contentFragment.setArguments(bundle);
return contentFragment;
}
//返回页面的数量
@Override
public int getCount() {
return menus.size();
}
}
private void addMenus() {
for (int i = 0; i <menus.size() ; i++) {
TextView textView=new TextView(this);
textView.setText(menus.get(i));
//默认第一项为红色,其它为黑色字体
if(i==0){
textView.setTextColor(Color.RED);
}else{
textView.setTextColor(Color.BLACK);
}
//将添加时的下标,赋值给tag
textView.setTag(i);
//设定点击事件
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//调用方法
setSelectMenu(Integer.parseInt(view.getTag()+""));
//切换viewPager的页面
viewPager.setCurrentItem(Integer.parseInt(view.getTag()+""));
}
});
//设定控件的宽度与高度
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
//设定控件的margin
params.setMargins(0,5,10,5);
//添加组件
linMenu.addView(textView,params);
//将新创建出来的textview组件添加到集合中
listMenus.add(textView);
}
}
/**
* 设置当前选中的菜单 文字为红色,其它为黑色
* @param tvIndex 菜单的下标
*/
private void setSelectMenu(int tvIndex){
for (int i = 0; i <listMenus.size() ; i++) {
if(i==tvIndex){
listMenus.get(i).setTextColor(Color.RED);
}else {
listMenus.get(i).setTextColor(Color.BLACK);
}
}
}
private void initMenus() {
listMenus=new ArrayList<>();
menus.add("新闻");
menus.add("社会");
menus.add("娱乐");
menus.add("体育");
menus.add("财经");
menus.add("汽车");
menus.add("科技");
menus.add("军事");
menus.add("小说");
menus.add("汽车1");
menus.add("科技1");menus.add("军事1");
menus.add("小说1");
}
}
public class ContentFragment extends Fragment {
private TextView textView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.content,container,false);
textView = v.findViewById(R.id.tv);
Bundle arguments = getArguments();
String key = arguments.getString("key");
textView.setText(key);
return v;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="#f0f">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:id="@+id/tv"
android:layout_centerInParent="true"/>
</RelativeLayout>
<RelativeLayout 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"
tools:context="zhanghaijiao.bawei.com.day07_demo1.MainActivity">
<!-- 只能包含一个子孩子 -->
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/hsv">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/linmenu">
</LinearLayout>
</HorizontalScrollView>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/vp"
android:layout_below="@+id/hsv"></android.support.v4.view.ViewPager>
</RelativeLayout>