viewPager 的可滑动 Title
有三种方式:
1. 系统提供的title
缺点:标题在viewpager的滑动过程中也会滑动
实现:在ViewPager布局中添加 PagerTabStrip 或者是 PagerTitleStrip 即可(两者选一个)
2. 自定义 Title 布局为:多个TextView + 一个 ImageView
3. 自定义 Title 布局为:一个LinearLayout 包含多个TextView ,重写onDraw() 方法,画出滑动块
(推荐使用)
public ViewPagerTitleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.mContext = context; mPaint = new Paint(); mPaint.setColor(context.getResources().getColor(R.color.colorAccent)); mPaint.setStyle(Paint.Style.FILL_AND_STROKE); mLayout = new LinearLayout(context); mLayout.setOrientation(LinearLayout.HORIZONTAL); LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(0, 20, 0, 20); addView(mLayout, params); params1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f); setWillNotDraw(false); } public void setData() { for (int i = 0; i < mPager.getAdapter().getCount(); i++) { TextView textView = new TextView(mContext); textView.setTextSize(18); textView.setText(mPager.getAdapter().getPageTitle(i)); textView.setGravity(Gravity.CENTER); textView.setLayoutParams(params1); final int finalI = i; textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mPager.setCurrentItem(finalI); } }); mLayout.addView(textView); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = mLayout.getWidth() / mPager.getAdapter().getCount(); canvas.drawRect(mLayout.getLeft() + (mPosition + mDistense) * width, mLayout.getBottom(), mLayout.getLeft() + (mPosition + 1 + mDistense) * width, mLayout.getBottom() + dp(6), mPaint); } public int dp(float var0) { float density = 2.0f; return var0 == 0.0F ? 0 : (int) Math.ceil((double) (density * var0)); } public void setViewPager(ViewPager pager) { this.mPager = pager; mPager.addView(new PagerTitleStrip(mContext)); if (mPager.getAdapter() != null) { setData(); mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { mDistense = positionOffset; mPosition=position; invalidate(); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); } }