橫向滑動菜單

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");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章