xml布局

  <RelativeLayout
        android:id="@+id/rl_column"
        android:layout_width="match_parent"
        android:layout_height="40dp" >

<HorizontalScrollView
            android:id="@+id/hsv"
            android:layout_width="50dp"
            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 SlidingMenu sm;

  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>();

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

   setContentView(R.layout.activity_new);

    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(NewActivity.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() {

    //找控件id
        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(NewActivity.this);
        mItemWidth = mScreenWidth / 7;//计算HorizontalScrollView可以展示几个
        mGallery.removeAllViews();
    }

}

  //NewsUtils内的计算代码

  public class NewsUtils {
    /** 获取屏幕的宽度 */
    public final static int getWindowsWidth(Activity activity) {
        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels;
    }
}

  

viewpager+fragment+HorizontalScrollView的更多相关文章

  1. viewpager+fragment+HorizontalScrollView详细版

    XML布局 <HorizontalScrollView            android:id="@+id/hsv"            android:layout_ ...

  2. Android ViewPager + Fragment的布局

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

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

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

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

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

  5. Android - ViewPager+Fragment初始化问题

    Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...

  6. Android ViewPager Fragment使用懒加载提升性能

     Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...

  7. ViewPager -- Fragment 切换卡顿 性能优化

    当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...

  8. viewpager viewpager+fragment

    内页面  不单写页面   viewpager+布局 import java.util.ArrayList; import java.util.List; import android.os.Bundl ...

  9. 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析

    ViewPager中切换界面Fragment被销毁的问题分析   1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3   2.Fragment生命周期以及与Activ ...

随机推荐

  1. C# RichTextBox 滚动条 滚动到最后一行

    使用RichTextBox控件用于显示数据时,滚动条只停留在开头,而我希望能够一直更新,显示最后一行的内容.解决方法记录于此. 转载自以下链接: http://blog.csdn.net/xelone ...

  2. VMware (威睿) 虚拟化产品简介

    VMware vSphere 是VMware(威睿)的一个虚拟化产品,VMware vSphere 是业界领先且最可靠的虚拟化平台.vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了 I ...

  3. Basic认证

    Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...

  4. css 滑动按钮样式

    <div class="pub_switch_box"> <input type="checkbox" id="pub_switch ...

  5. JAVA字符串的GZIP压缩解压缩

    package com.gzip; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ...

  6. WebService之Axis2(4):二进制文件传输

    在<WebService大讲堂之Axis2(2):复合类型数据的传递>中讲过,如果要传递二进制文件(如图像.音频文件等),可以使用byte[]作为数据类型进行传递,然后客户端使用RPC方式 ...

  7. Wcf Restful Service服务搭建

    目的 使用Wcf(C#)搭建一个Restful Service 背景 最近接到一个项目,客户要求使用Restful 方式接收到数据,并对数据提供对数据的统计显示功能,简单是简单,但必须要使用Restf ...

  8. eclipse Project facet Java version 1.8 is not supported.

    在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持.说明项目是其他版本jdk编译的, ...

  9. PostgreSQL 一主两备节点(两备节点为同步节点)故障恢复

    PostgreSQL  同步复制及故障恢复 10.2.208.10:node1:master 10.2.208.11:node2:standby1 同步 10.2.208.12:node3:stand ...

  10. Summary: Process & Tread

    refer to http://www.programmerinterview.com/index.php/operating-systems/thread-vs-process/ A process ...