![](https://img-blog.csdn.net/20180223225603638)
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 java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private HorizontalScrollView horizontalScrollView;
private LinearLayout layout;
private ViewPager viewPager;
private String[] titles;
private List<TextView> titlesView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
horizontalScrollView = (HorizontalScrollView) findViewById(R.id.hsv);
layout = (LinearLayout) findViewById(R.id.layout);
viewPager = (ViewPager) findViewById(R.id.viewpager);
titles = new String[]{"征战者","决战者","剑魂","鬼泣","狂战士","阿修罗","驭剑士","暗殿骑士","契魔者","流浪武士"};
//动态添加顶部textview
initTitles();
//底部viewpager要使用的FragmentUI适配器
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return Fragment1.getInstance(titles[position%titles.length]);
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
});
//设置顶部标题点击事件;
setOnClickListener();
}
/**
* 动态生成标题
*/
private void initTitles() {
titlesView = new ArrayList<TextView>();
for (int i = 0; i < titles.length; i++) {
TextView textView = new TextView(MainActivity.this);
textView.setText(titles[i]);
textView.setTextSize(35);
if (i==0){//实现默认第一个红色
textView.setTextColor(Color.RED);
}
textView.setId(i);//把循环的i设置给textview的下标;
textView.setOnClickListener(this);
//LinearLayout中的孩子的定位参数
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(10,10,10,10);//设置左上右下四个margin值;
layout.addView(textView,layoutParams);//layoutParams是让linearLayout知道如何摆放自己孩子的位置的;
titlesView.add(textView);
}
}
@Override
public void onClick(View view) {
//实现点击标题切换viewPager
int id = view.getId();
viewPager.setCurrentItem(id);
}
/*
*viewPager滑动联动标题滑动并改变状态
*/
private void setOnClickListener() {
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
//滑动viewPager标题变色,用循环改变标题颜色,通过判断来决定谁红谁灰;
for (int i = 0; i < titles.length; i++) {
if (i == position%titles.length) {
titlesView.get(i).setTextColor(Color.RED);
}else {
titlesView.get(i).setTextColor(Color.GRAY);
}
}
//标题跟随滑动功能
int x= (int) layout.getChildAt(position%titles.length).getX();
horizontalScrollView.scrollTo(x,0);
// int width=(position%titles.length)*20;
// for (int i = 0; i < position%titles.length; i++) {
// width=width+titlesView.get(i).getWidth();
// }
// horizontalScrollView.scrollTo(width,0);
// int width = titlesView.get(position).getWidth();
// horizontalScrollView.scrollTo((width+20)*position,0);
}
@Override
public void onPageScrollStateChanged(int state) {}
});
}
}
//xml布局
<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="com.example.text_horizontalscrollview.MainActivity">
<HorizontalScrollView
android:id="@+id/hsv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
//Fragment1内容
package com.example.text_horizontalscrollview;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* author:Created by WangZhiQiang on 2018/2/23.
*/
public class Fragment1 extends Fragment {
//在fragment内部写一个静态方法,返回自己;供外部调用;
public static Fragment getInstance(String title){
Fragment1 fragment1 = new Fragment1();
Bundle bundle = new Bundle();
bundle.putString("title",title);
fragment1.setArguments(bundle);
return fragment1;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setTextSize(200);
textView.setText(getArguments().getString("title"));
return textView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//根据标题是否相同请求不同的接口;
}
}