横向滑动菜单, HorizontalScrollView,fragment,Viewpager结合使用


package example.com.horizontalscroll;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import example.com.horizontalscroll.fragment.MyFragment;
            public class MainActivity extends AppCompatActivity implements View.OnClickListener {
                     private HorizontalScrollView main_hsv;
                     private ViewPager main_viewpager;
                     private LinearLayout linear_head;
                     private String[] titles;
                     private ArrayList<TextView> textViewsList;
         @Override 
       protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         //找控件 
        main_hsv = (HorizontalScrollView) findViewById(R.id.main_hsv);
             main_viewpager = (ViewPager) findViewById(R.id.main_viewpager);
            linear_head = (LinearLayout) findViewById(R.id.linear_head);
             //创建一个标题数组 
       titles = new String[]{"头条", "动漫", "电视剧", "电影", "综艺", "科技", "时尚", "旅游", "体育", "搞笑"};
            //动态添加头部标题TextView的方法 
       inittitles();
            //viewpager设置适配器,获取fragment传过来的值 
       main_viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
                 @Override 
                 public Fragment getItem(int position) {
                     return   MyFragment.getInstance(titles[position]); }
                 @Override 
             public int getCount() {
                     return titles.length; } });
        //设置顶部标题的监听事件的方法 
       setOnClickListener();
        }
     //设置顶部标题的监听事件的方法 
   private void setOnClickListener() {
                 main_viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
             @Override 
             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
             }
             @Override 
         public void onPageSelected(int position) {
                 // 标题变色,用循环改变标题颜色,通过判断来决定谁红谁灰; 
              // 举例:娱乐的下标是position1 
              for (int i = 0; i <titles.length ; i++) {
             if(i==position){
             textViewsList.get(i).setTextColor(Color.RED);
         }else {
            textViewsList.get(i).setTextColor(Color.GRAY);
                }
        } //点击TextView标题随着滑动功能,x轴改变,y轴不变 
              int width = textViewsList.get(position).getWidth();            
                        int totalWidth=(width+20)*position;            
                        main_hsv.scrollTo(totalWidth,0);
}      
    @Override public void onPageScrollStateChanged(int state) {
        }
    });
}
    private void inittitles() {
        //创建一个集合将TextView放到集合里      
        textViewsList = new ArrayList<>();
        //遍历每一个数组,将其添加到TextView      
    for (int i = 0; i < titles.length; i++) {
            TextView textView = new TextView(MainActivity.this);
            textView.setTextSize(20);
            //根据将第一个TextView默认设置为红色字体
       if (i == 0) { textView.setTextColor(Color.RED);
        } else {
             textView.setTextColor(Color.BLACK);
        }         
        //titles赋值给TextView
        textView.setText(titles[i]);
        //把循环的i设置给TextView的下标 t
        extView.setId(i);         
        //textview监听
        textView.setOnClickListener(this);         
        //TextView添加到linear_head
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        params.setMargins(10, 10, 10, 10);
        linear_head.addView(textView, params);         
        //textview视图添加到TextViews里面         
        textViewsList.add(textView);
        }
}   
    //textview监听  
    @Override
    public void onClick(View view) {
        //得到TextView的下标 int id = view.getId();      
        //点击TextView的时候把下标赋值给viewpager
        main_viewpager.setCurrentItem(id);
        }
}
<?xml version="1.0" encoding="utf-8"?>
<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="example.com.horizontalscroll.MainActivity">

    <HorizontalScrollView
        android:id="@+id/main_hsv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/linear_head"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"></LinearLayout>
    </HorizontalScrollView>

    <android.support.v4.view.ViewPager
        android:id="@+id/main_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</LinearLayout>
横向滑动菜单, HorizontalScrollView,fragment,Viewpager结合使用