您的位置:首页 > 其它

HorizontalScrollView 使用 实现textview和viewpager的联动

2016-06-28 10:46 447 查看

设置初始化信息

// 设置主界面
// 隐藏下拉bar
horizontalScrollView.setHorizontalScrollBarEnabled(false);
// 设置导航分类
setNavigationTypes();
// 设置viewpager
setViewPagerDetails();

设置导航信息

// 设置导航
private void setNavigationTypes() {

/** ============================================================ */
// 获得屏幕总宽度
DisplayMetrics metrics = new DisplayMetrics();// 新建 展示 度量
getWindowManager().getDefaultDisplay().getMetrics(metrics);// 获得宽度
screenWidth = metrics.widthPixels;// 获得 屏幕宽度像素
System.out.println("metrics.widthPixels宽度像素是:" + screenWidth);
/** ============================================================ */

// 设置每一个item的宽度
itemWidth = screenWidth / 6;
// 设置每一个item
for (int i = 0; i < list_typeUrls.size(); i++) {
// 创建TextView的实例
final TextView typeTextView = new TextView(this);
// 设置
typeTextView.setText(list_typeUrls.get(i).getType());// 设置内容
typeTextView.setTextSize(16.0f);// 设置字体大小
typeTextView.setPadding(15, 6, 15, 6);// 设置字的内边距padding值
typeTextView.setGravity(Gravity.CENTER);// 设置文字居中
// 第一个默认是红色
if (i == 0) {
typeTextView.setTextColor(Color.RED);
} else {
typeTextView.setTextColor(Color.BLACK);
}
// 设置每一个的监听事件
typeTextView.setOnClickListener(new OnClickListener() {
/** 字体颜色的改变可以只在viewpager中设置,因为只要点击就可以触发pagerchangelister */
@Override
public void onClick(View v) {
for (int j = 0; j < linearLayout_types.getChildCount(); j++) {
TextView tv = (TextView) linearLayout_types
.getChildAt(j);
if (tv == v) {// 如果选择的这个控件正好是当前的控件
// typeTextView.setTextColor(Color.RED);// 把自己变为红色
// 点击后要设置转换为对应的viewpager
vp_details.setCurrentItem(j);
} else {
// tv.setTextColor(Color.BLACK);// 把上一个变为黑色
}
}
}
});
// 添加进布局
linearLayout_types.addView(typeTextView);
}
}

设置viewpager的详细

// 设置viewpager

    private void setViewPagerDetails() {

        // 实例化一个要放入viewpager的list集合

        List<Fragment> list_vpFragments = new ArrayList<Fragment>();

        for (int i = 0; i < list_typeUrls.size(); i++) {

            NewsDetailFragment newsDetailFragment = new NewsDetailFragment();

            Bundle bundle = new Bundle();

            bundle.putSerializable("newsTypeUrlsData", list_typeUrls.get(i));

            newsDetailFragment.setArguments(bundle);

            list_vpFragments.add(newsDetailFragment);

        }

        // 设置适配器

        NewsDetailPagerAdapter adapter = new NewsDetailPagerAdapter(

                getSupportFragmentManager(), list_vpFragments);

        vp_details.setAdapter(adapter);

        // 设置监听

        vp_details.setOnPageChangeListener(new OnPageChangeListener() {

            @Override

            public void onPageSelected(int arg0) {

                // 被选择就要设置type 1.变红 2.在屏幕中央

                changeTypeTextView(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

            }

        });

    }

选择时会在屏幕中央的数据

// 被选择就要设置type 1.变红 2.在屏幕中央
protected void changeTypeTextView(int positon) {
// 获得应该设置的textview
TextView tv = (TextView) linearLayout_types.getChildAt(positon);
for (int i = 0; i < linearLayout_types.getChildCount(); i++) {
TextView tv0 = (TextView) linearLayout_types.getChildAt(i);
// 设置颜色
if (i == positon) {
tv0.setTextColor(Color.RED);
// 设置在屏幕中央
int tv_measuredWidth = tv0.getMeasuredWidth();// 获得自身像素宽度
int tv_leftMeasuredWidth = tv0.getLeft();// 获得控件左侧像素宽度
int moveSizeX = tv_leftMeasuredWidth + tv_measuredWidth / 2
- screenWidth / 2;// 得出要左移的宽度(分正负)
horizontalScrollView.smoothScrollTo(moveSizeX, 0);// 开始移动(参数X,参数Y)
} else {
tv0.setTextColor(Color.BLACK);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: