横向滑动菜单

public class MainActivity extends AppCompatActivity {


    //所有的菜单内容
    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");








    }
}

猜你喜欢

转载自blog.csdn.net/kingv587/article/details/80010463
今日推荐