HorizontalScrollView 使用 实现textview和viewpager的联动


设置初始化信息

	// 设置主界面
		// 隐藏下拉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);
			}
		}
	}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值