public class MainActivity extends AppCompatActivity {
private HorizontalScrollView hsv;
private LinearLayout linMenu;
private ViewPager viewPager;
private List<String> menuText=new ArrayList<>();
//存放菜单TextView组件
private List<TextView> menuLists=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hsv = findViewById(R.id.hsv);
linMenu = findViewById(R.id.lin_menu);
viewPager = findViewById(R.id.vp);
//初使化数据
initData();
//初使化横向滑动菜单
initMenu();
//设置viewpager的适配器
MyPagerAdapter adapter=new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
//添加事件
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {//当页面被选中时回调
//改变选中菜单的颜色
setSelectedMenu(position);
//进行滚动
setScrollMenu(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
/**
* 设置横向滑动菜单 滚动到 指定的菜单 项
* @param index
*/
private void setScrollMenu(int index){
//得到组件
TextView tvMenu=menuLists.get(index);
float tx = tvMenu.getX();//得到x坐标
//scrollTo(x,y):滚动 y-代表垂直方向的滚动 x-代表水平方向的滚动
hsv.scrollTo((int)tx,0);
}
private void initData() {
menuText.add("推荐");
menuText.add("新时代");
menuText.add("娱乐");
menuText.add("社会");
menuText.add("视频");
menuText.add("科技");
menuText.add("百科");
menuText.add("体育");
menuText.add("段子");
menuText.add("图片");
menuText.add("物理");
menuText.add("社会");
menuText.add("北京");
}
private void initMenu() {
//将TextView组件 添加到 linMenu 组件中
for(int i=0;i<menuText.size();i++){
//创建菜单 TextView
TextView textView=new TextView(this);
textView.setText(menuText.get(i));
if(i==0){
textView.setTextColor(Color.RED);//设置字体颜色是红色
}else {
textView.setTextColor(Color.BLACK);//设置字体颜色是黑色
}
//设置标签,用来记录它是第几个菜单
textView.setTag(i);
//添加点击事件
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//viewpager切换到不同的页面
viewPager.setCurrentItem(Integer.parseInt(view.getTag()+""));
//设置颜色
setSelectedMenu(Integer.parseInt(view.getTag()+""));
}
});
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0,5,8,0);//设置菜单之间的间隔
//进行添加 addView
linMenu.addView(textView,params);
//添加到集合中
menuLists.add(textView);
}
}
/**
* 将所有的菜单遍历一遍,设置选中的菜单字体颜色为红色,其余是黑色
* @param menuIndex
*/
private void setSelectedMenu(int menuIndex){//menuIndex:当前选中菜单的下标
for(int i=0;i<menuLists.size();i++){
if(i==menuIndex){
menuLists.get(i).setTextColor(Color.RED);//选中的颜色
}else {
menuLists.get(i).setTextColor(Color.BLACK);
}
}
}
class MyPagerAdapter extends FragmentPagerAdapter{
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
//用来返回每个页面
@Override
public Fragment getItem(int position) {//position:页面的下标
ContentFragment contentFragment=new ContentFragment();
//传递参数
Bundle bundle=new Bundle();
bundle.putString("data",menuText.get(position));
contentFragment.setArguments(bundle);
return contentFragment;
}
//返回页面的数量
@Override
public int getCount() {
return menuText.size();
}
}
}