XML布局

    <HorizontalScrollView
            android:id="@+id/hsv"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@+id/iamge_glide"
            android:scrollbars="none"
            android:background="#f0f0f0" >
            
            <LinearLayout  
            android:id="@+id/id_gallery"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_gravity="center_vertical"  
            android:orientation="horizontal" />
        </HorizontalScrollView>

  <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

activity代码实现

      private HorizontalScrollView hsv;
       
    private ViewPager vp;
    String[] name = new String[] { "推荐", "热点", "娱乐", "科技", "汽车", "体育", "财经",
           "军事", "国际", "时尚", "视屏", "社会" };

  private LinearLayout mGallery;
   private int mScreenWidth;
   private int mItemWidth = 0;
   private ArrayList<String> list;
   private int columnSelectIndex = 0;
   private ArrayList<Fragment> fragments = new ArrayList<Fragment>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initTabColumn();
        initFragment();
        
    }
    private void initTabColumn() {
        // TODO Auto-generated method stub
        initScrollView();
        int count = list.size();
        for (int i = 0; i < count; i++) {
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    mItemWidth, LayoutParams.WRAP_CONTENT);
            params.leftMargin = 5;
            params.rightMargin = 5;
            TextView columnTextView = new TextView(MainActivity.this);
            columnTextView.setGravity(Gravity.CENTER);
            columnTextView.setPadding(5, 5, 5, 5);
            columnTextView.setId(i);
            columnTextView.setText(list.get(i));
            // 设置默认标签为选中状态
            if (columnSelectIndex == i) {
                columnTextView.setSelected(true);
                columnTextView.setTextColor(Color.RED);
            }
            /*
             * 设置点击事件监听
             */
            columnTextView.setOnClickListener(new OnClickListener() {

@Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    for (int j = 0; j < mGallery.getChildCount(); j++) {
                        TextView localView = (TextView) mGallery.getChildAt(j);
                        if (localView != v) {
                            localView.setSelected(false);
                        } else {
                            localView.setSelected(true);
                            vp.setCurrentItem(j);
                        }
                    }
                    int index = mGallery.indexOfChild(v);
                }
            });
            mGallery.addView(columnTextView, i, params);
        }
    }

//把数组添加到list集合中
private void initData() {
        list = new ArrayList<String>();
        for (int i = 0; i < name.length; i++) {
            list.add(name[i]);

}
        System.out.println(list);
    }
private void initView() {

//        image_head = (ImageView) findViewById(R.id.image_head);
//        right_head = (ImageView) findViewById(R.id.right_head);
        hsv = (HorizontalScrollView) findViewById(R.id.hsv);
//        right_head = (ImageView) findViewById(R.id.iamge_glide);
        vp = (ViewPager) findViewById(R.id.vp);
        mGallery = (LinearLayout) findViewById(R.id.id_gallery);
}

/**
        image_head.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sm.showMenu();//显示侧滑菜单
            }
        });
*/

public void initFragment() {
        fragments.clear();
        int count = list.size();
        for (int i = 0; i < count; i++) {//根据list集合的长度创建fragment
            Bundle data = new Bundle();   //传值给每个fragment
            data.putString("text", list.get(i));
            data.putInt("id", i);
            MyFragment f = new MyFragment();
            f.setArguments(data);
            fragments.add(f);
        }
        MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(
                getSupportFragmentManager(), fragments);
        vp.setAdapter(adapter);
        vp.setOnPageChangeListener(new OnPageChangeListener() {

@Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                vp.setCurrentItem(arg0);

selectTab(arg0);
            }

@Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

}

@Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

}
        });
    }

private void selectTab(int tab_position) {
        // TODO Auto-generated method stub
        columnSelectIndex = tab_position;
        View currTextView = mGallery.getChildAt(tab_position);
        int w = currTextView.getMeasuredWidth();
        int l = currTextView.getLeft();
        int i2 = l + w / 2 - mScreenWidth / 2;
        hsv.smoothScrollTo(i2, 0);
        // 判断是否选中
        for (int i = 0; i < mGallery.getChildCount(); i++) {
            TextView eveTxetView = (TextView) mGallery.getChildAt(i);
            boolean ischeck;
            if (i == tab_position) {
                ischeck = true;
                eveTxetView.setTextColor(Color.RED);
            } else {
                ischeck = false;
                eveTxetView.setTextColor(Color.BLACK);
            }
            eveTxetView.setSelected(ischeck);
        }
    }
    
    private void initScrollView() {
        mScreenWidth = NewsUtils.getWindowsWidth(MainActivity.this);
        mItemWidth = mScreenWidth / 7;//计算HorizontalScrollView可以展示几个
        mGallery.removeAllViews();
    }

//NewsUtils中的计算

  public final static int getWindowsWidth(Activity activity) {
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels;
    }

//MyFragmentPagerAdapter 适配器中的代码

package com.wt.ada;

import java.util.ArrayList;
import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

private List<Fragment> fragments;
    private FragmentManager fm;
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    public MyFragmentPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments) {
        super(fm);
        this.fm = fm;
        this.fragments = fragments;    
    }

@Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        return fragments.get(arg0);
    }

@Override
    public int getCount() {
        // TODO Auto-generated method stub
        System.out.println(fragments.size());
        return fragments.size();
    }
    @Override
    public int getItemPosition(Object object) {
        // TODO Auto-generated method stub
        return POSITION_NONE;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Object obj = super.instantiateItem(container, position);
        return obj;
    }

}

viewpager+fragment+HorizontalScrollView详细版的更多相关文章

  1. viewpager+fragment+HorizontalScrollView

    xml布局 <RelativeLayout        android:id="@+id/rl_column"        android:layout_width=&q ...

  2. ViewPager+Fragment取消预加载(延迟加载)(转)

    原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...

  3. ViewPager+Fragment取消预加载(延迟加载)

    在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragment有个不好或者太好的地方.例如你在ViewPager中添加了三个Fragment,当加载V ...

  4. Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  5. ViewPager Fragment 懒加载 可见 总结 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. Android ViewPager + Fragment的布局

    ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...

  7. iOS App上架流程(2016详细版)

    iOS App上架流程(2016详细版) 原文地址:http://www.jianshu.com/p/b1b77d804254 感谢大神整理的这么详细 一.前言: 作为一名iOSer,把开发出来的Ap ...

  8. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  9. Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...

随机推荐

  1. Java学习-036-JavaWeb_005 -- JSP 动作标识 - forward

    JSP 动作主要作用是根据指定的动作进行相应的处理. 一.param 动作 用来给 HTML 文件和 JSP 文件传递参数的,经常和 forward.include.plugin 动作结合使用,语法格 ...

  2. Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法

    前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...

  3. The Secrets of Oracle Row Chaining and Migration

    from http://www.akadia.com/services/ora_chained_rows.html Overview If you notice poor performance in ...

  4. Linux就这个范儿 第10章 生死与共的兄弟

    Linux就这个范儿 第10章 生死与共的兄弟 就说Linux系统的开机.必须经过加载BIOS.读取MBR.Boot Loader.加载内核.启动init进程并确定运行等级.执行初始化脚本.启动内核模 ...

  5. loop_nslookup

    function loop_nslookup() { $baseFolder = "D:\ps_toolkit" $ip_list = "$baseFolder\ip_l ...

  6. C# MySqlHelper

    1.MySql官方提供ADO.NET访问模式的MySql.Data.dll,下载地址:http://dev.mysql.com/downloads/connector/net/ 2.MySqlHelp ...

  7. window.location.href和window.open的几种用法和区别

    使用js的同学一定知道js的location.href的作用是什么,但是在js中关于location.href的用法究竟有哪几种,究竟有哪些区别,估计很多人都不知道了. 一.location.href ...

  8. Java 找到数组中两个元素相加等于指定数的所有组合

    思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...

  9. 安装和删除 Alcatraz 插件

    在终端下输入如下命令来安装Alcatraz: curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install. ...

  10. 实验十四_访问CMOS RAM

    编程:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间. 注意:CMOS RAM中存储着系统的配置信息,除了保存时间信息的单元外,不要向其他的单元写入内容,否则将引起一些系 ...