HorizontalScrollView

//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>

猜你喜欢

转载自blog.csdn.net/aa15362415/article/details/80422475