打造變色的viewpager指示器

在上篇播客中實(shí)現(xiàn)了textview的字體變色,在上一篇的基礎(chǔ)上結(jié)合viewpager實(shí)現(xiàn)一個(gè)變色的viewpager指示器,效果如下;

device-2017-06-25-172024.gif

上面指示器的文字在這里是動(dòng)態(tài)創(chuàng)建添加到LinearLayout布局中的,

for (int i = 0; i < items.length; i++) {
    //動(dòng)態(tài)添加顏色跟蹤的textview
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
     ViewGroup.LayoutParams.WRAP_CONTENT);
     params.weight = 1;
     ColorTextView colorTextView = new ColorTextView(this);
     //設(shè)置顏色
     colorTextView.setTextSize(20);
     colorTextView.setChangeColor(Color.RED);
     colorTextView.setText(items[i]);
     //把新的加入LinearLayout容器中
     colorTextView.setLayoutParams(params);
      mIndicatorContainer.addView(colorTextView);
     //加入集合
     mIndicator.add(colorTextView);
        }

創(chuàng)建完成后給viewpager設(shè)置相應(yīng)的適配器和添加一個(gè)滑動(dòng)監(jiān)聽就可以了,
設(shè)置viewpager適配器,

      mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return ViewFragment.newInstance(items[position]);
            }

            @Override
            public int getCount() {
                return items.length;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                super.destroyItem(container, position, object);
            }
        });

設(shè)置viewpager滑動(dòng)監(jiān)聽,

      mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                ColorTextView left = mIndicator.get(position);
                left.setDirection(ColorTextView.Direction.RIGHT_TO_LEFT);
                left.setCurrentProgress(1 - positionOffset);

                try {
                    ColorTextView right = mIndicator.get(position + 1);
                    right.setDirection(ColorTextView.Direction.LEFT_TO_RIGHT);
                    right.setCurrentProgress(positionOffset);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

這里用的是addOnPageChangeListener,當(dāng)然用setOnPageChangeListener也可以,不過這個(gè)方法已經(jīng)過時(shí)了,在onPageScrolled方法中要注意float positionOffset,它是根據(jù)滑動(dòng)時(shí)0-1的變化的值,所以剛好根據(jù)這個(gè)值計(jì)算當(dāng)前的進(jìn)度值,在設(shè)置右邊變色的時(shí)候,position + 1在最后一個(gè)的時(shí)候會導(dǎo)致數(shù)組角標(biāo)越界,要做一個(gè)異常的捕獲,用if來判斷也可以,這樣整個(gè)效果就實(shí)現(xiàn)了。
源碼地址:http://pan.baidu.com/s/1nvyp0Hb

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容