横向滑动菜单, 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;
imp ort 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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值