横向滑动菜单, 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) {
// 标题变色,用循环改变标题颜色,通过判断来决定谁红谁灰;
// 举例:娱乐的下标是position是1
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>