@Override
 public void onPageScrollStateChanged(int state) {
   if (mTabView != null) {
     mTabView.onPageScrollStateChanged(state);
   }
   if (mOnPageChangeListener != null) {
     mOnPageChangeListener.onPageScrollStateChanged(state);
   }
 }
 @Override
 public void onPageSelected(int position) {
   if (mTabView != null) {
     mTabView.onPageSelected(position);
   }
   if (mOnPageChangeListener != null) {
     mOnPageChangeListener.onPageSelected(position);
   }
 }
 @Override
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
   if (mTabView != null) {
     mTabView.onPageScrolled(position, positionOffset, positionOffsetPixels);
   }
   if (mOnPageChangeListener != null) {
     mOnPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
   }
   // postInvalidate();
 }
    @Override
    public void onPageSelected(int position) {
      if (delegatePageListener != null) {
        delegatePageListener.onPageSelected(position);
      }

      if (position < tabCount) {
        for (int i = 0; i < tabCount; i++) {
          View v = tabsContainer.getChildAt(i);
          if (v instanceof TextView) {
            TextView tab = (TextView) v;
            if (i == position) tab.setSelected(true);
            else tab.setSelected(false);
          } else if (v instanceof CustomTabView) {
            CustomTabView tab = (CustomTabView) v;
            if (i == position) tab.getTabItemTxt().setSelected(true);
            else tab.getTabItemTxt().setSelected(false);
          }
        }
      }
    }
 @Override
 protected void onFinishInflate() {
   super.onFinishInflate();
   if (getChildAt(0) instanceof CustomTabView) {
     mTabView = (CustomTabView) getChildAt(0);
     mViewPager = (ViewPager) getChildAt(1);
   } else {
     mTabView = (CustomTabView) getChildAt(1);
     mViewPager = (ViewPager) getChildAt(0);
   }
   mViewPager.setOnPageChangeListener(this);
   mTabView.setOnItemChangeListener(this);
 }
  private void updateTabStyles() {

    for (int i = 0; i < tabCount; i++) {

      View v = tabsContainer.getChildAt(i);

      if (v instanceof TextView) {
        v.setBackgroundResource(tabBackgroundResId);
        TextView tab = (TextView) v;
        tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize);
        tab.setTypeface(tabTypeface, tabTypefaceStyle);
        tab.setTextColor(tabTextColor);
        tab.setPadding(tabPadding, tabPaddingTopBottom, tabPadding, tabPaddingTopBottom);
        // setAllCaps() is only available from API 14, so the upper case is made manually if we are
        // on a
        // pre-ICS-build
        if (textAllCaps) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            tab.setAllCaps(true);
          } else {
            tab.setText(tab.getText().toString().toUpperCase(locale));
          }
        }
      } else if (v instanceof CustomTabView) {
        CustomTabView tab = (CustomTabView) v;
        tab.getTabItemTxt().setBackgroundResource(tabBackgroundResId);
        tab.getTabItemTxt().setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize);
        tab.getTabItemTxt().setTypeface(tabTypeface, tabTypefaceStyle);
        tab.getTabItemTxt().setTextColor(tabTextColor);
        tab.getTabItemTxt()
            .setPadding(tabPadding, tabPaddingTopBottom, tabPadding, tabPaddingTopBottom);
        // setAllCaps() is only available from API 14, so the upper case is made manually if we are
        // on a
        // pre-ICS-build
        if (textAllCaps) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            tab.getTabItemTxt().setAllCaps(true);
          } else {
            tab.getTabItemTxt()
                .setText(tab.getTabItemTxt().getText().toString().toUpperCase(locale));
          }
        }
      }
    }
  }
 private void addCustomTab(final int position, String title) {
   CustomTabView tab = new CustomTabView(getContext());
   tab.getTabItemTxt().setText(title);
   if (position == 0) tab.getTabItemTxt().setSelected(true);
   addTab(position, tab);
 }