From cbb88109494ffc7916f6639c20ce05c0cec941a9 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 07 四月 2021 15:07:45 +0800
Subject: [PATCH] 3.9.1bug修复

---
 library-ViewPagerIndicator/src/com/viewpagerindicator/MainTabPageIndicator.java |  563 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 295 insertions(+), 268 deletions(-)

diff --git a/library-ViewPagerIndicator/src/com/viewpagerindicator/MainTabPageIndicator.java b/library-ViewPagerIndicator/src/com/viewpagerindicator/MainTabPageIndicator.java
index fd9018d..53e0876 100644
--- a/library-ViewPagerIndicator/src/com/viewpagerindicator/MainTabPageIndicator.java
+++ b/library-ViewPagerIndicator/src/com/viewpagerindicator/MainTabPageIndicator.java
@@ -18,329 +18,356 @@
 
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Color;
+import android.graphics.Typeface;
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.support.v4.view.ViewPager.OnPageChangeListener;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.util.TypedValue;
+import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.HorizontalScrollView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.lcjian.library.util.common.DimenUtils;
+
 /**
  * This widget implements the dynamic action bar tab behavior that can change
  * across different configurations or circumstances.
  */
 public class MainTabPageIndicator extends HorizontalScrollView implements
-		PageIndicator {
-	/** Title text used when no title is provided by the adapter. */
-	private static final CharSequence EMPTY_TITLE = "";
+        PageIndicator {
+    /**
+     * Title text used when no title is provided by the adapter.
+     */
+    private static final CharSequence EMPTY_TITLE = "";
 
-	/**
-	 * Interface for a callback when the selected tab has been reselected.
-	 */
-	public interface OnTabReselectedListener {
-		/**
-		 * Callback when the selected tab has been reselected.
-		 * 
-		 * @param position
-		 *            Position of the current center item.
-		 */
-		void onTabReselected(int position);
-	}
+    /**
+     * Interface for a callback when the selected tab has been reselected.
+     */
+    public interface OnTabReselectedListener {
+        /**
+         * Callback when the selected tab has been reselected.
+         *
+         * @param position Position of the current center item.
+         */
+        void onTabReselected(int position);
+    }
 
-	private Runnable mTabSelector;
-	/**
-	 * ViewPager涓璽ab鐨勭偣鍑讳簨浠�
-	 */
-	private final OnClickListener mTabClickListener = new OnClickListener() {
-		public void onClick(View view) {
-			TabView tabView = (TabView) view;
-			final int oldSelected = mViewPager.getCurrentItem();
-			final int newSelected = tabView.getIndex();
-			mViewPager.setCurrentItem(newSelected);
-			if (oldSelected == newSelected && mTabReselectedListener != null) {
-				mTabReselectedListener.onTabReselected(newSelected);
-			}
-		}
-	};
+    private Runnable mTabSelector;
+    /**
+     * ViewPager涓璽ab鐨勭偣鍑讳簨浠�
+     */
+    private final OnClickListener mTabClickListener = new OnClickListener() {
+        public void onClick(View view) {
+            TabView tabView = (TabView) view;
+            final int oldSelected = mViewPager.getCurrentItem();
+            final int newSelected = tabView.getIndex();
+            mViewPager.setCurrentItem(newSelected);
+            if (oldSelected == newSelected && mTabReselectedListener != null) {
+                mTabReselectedListener.onTabReselected(newSelected);
+            }
+        }
+    };
 
-	private final IcsLinearLayout mTabLayout;
+    private final IcsLinearLayout mTabLayout;
 
-	private ViewPager mViewPager;
-	private ViewPager.OnPageChangeListener mListener;
+    private ViewPager mViewPager;
+    private ViewPager.OnPageChangeListener mListener;
 
-	private int mMaxTabWidth;
-	private int mSelectedTabIndex;
+    private int mMaxTabWidth;
+    private int mSelectedTabIndex;
+    private int textColor;
+    private int highLightTextColor;
 
-	private OnTabReselectedListener mTabReselectedListener;
+    private int textSpecialColorPosition = -1;
+    private int textSpecialColor;
 
-	public MainTabPageIndicator(Context context) {
-		this(context, null);
-	}
+    private OnTabReselectedListener mTabReselectedListener;
 
-	public MainTabPageIndicator(Context context, AttributeSet attrs) {
-		super(context, attrs);
-		setHorizontalScrollBarEnabled(false);
+    public MainTabPageIndicator(Context context) {
+        this(context, null);
+    }
 
-		mTabLayout = new IcsLinearLayout(context,
-				R.attr.vpiTabPageIndicatorStyle);
-		addView(mTabLayout, new ViewGroup.LayoutParams(WRAP_CONTENT,
-				MATCH_PARENT));
-	}
+    public void setTextColor(int textColor, int highLightTextColor) {
+        this.textColor = textColor;
+        this.highLightTextColor = highLightTextColor;
+    }
 
-	public void setOnTabReselectedListener(OnTabReselectedListener listener) {
-		mTabReselectedListener = listener;
-	}
+    public void setTextSpecialColor(int position, int color) {
+        this.textSpecialColorPosition = position;
+        this.textSpecialColor = color;
+    }
 
-	@Override
-	public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-		final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
-		final boolean lockedExpanded = widthMode == MeasureSpec.EXACTLY;
-		setFillViewport(lockedExpanded);
 
-		final int childCount = mTabLayout.getChildCount();
-		if (childCount > 1
-				&& (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) {
-			if (childCount > 2) {
-				mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f);
-			} else {
-				mMaxTabWidth = MeasureSpec.getSize(widthMeasureSpec) / 2;
-			}
-		} else {
-			mMaxTabWidth = -1;
-		}
+    public MainTabPageIndicator(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setHorizontalScrollBarEnabled(false);
 
-		final int oldWidth = getMeasuredWidth();
-		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-		final int newWidth = getMeasuredWidth();
+        mTabLayout = new IcsLinearLayout(context,
+                R.attr.vpiTabPageIndicatorStyle);
+        addView(mTabLayout, new ViewGroup.LayoutParams(WRAP_CONTENT,
+                MATCH_PARENT));
+    }
 
-		if (lockedExpanded && oldWidth != newWidth) {
-			// Recenter the tab display if we're at a new (scrollable) size.
-			setCurrentItem(mSelectedTabIndex);
-		}
-	}
+    public void setOnTabReselectedListener(OnTabReselectedListener listener) {
+        mTabReselectedListener = listener;
+    }
 
-	/**
-	 * 鍗曚釜Tab
-	 * 
-	 * @param position
-	 */
-	@SuppressLint("ResourceAsColor")
-	private void animateToTab(final int position) {
-		final View tabView = mTabLayout.getChildAt(position);
-		if (mTabSelector != null) {
-			removeCallbacks(mTabSelector);
-		}
-		for (int i = 0; i < mTabLayout.getChildCount(); i++) {
-			((TextView) mTabLayout.getChildAt(i)).setTextSize(
-					TypedValue.COMPLEX_UNIT_SP, 18);
-			((TextView) mTabLayout.getChildAt(i)).setTextColor(Color.argb(255,
-					255, 255, 255));
-		}
-		((TextView) tabView).setTextColor(Color.argb(255, 255, 243, 46));
-		mTabSelector = new Runnable() {
-			public void run() {
-				final int scrollPos = tabView.getLeft()
-						- (getWidth() - tabView.getWidth()) / 2;
-				smoothScrollTo(scrollPos, 0);
+    @Override
+    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        final boolean lockedExpanded = widthMode == MeasureSpec.EXACTLY;
+        setFillViewport(lockedExpanded);
 
-				mTabSelector = null;
-			}
-		};
-		post(mTabSelector);
-	}
+        final int childCount = mTabLayout.getChildCount();
+        if (childCount > 1
+                && (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) {
+            if (childCount > 2) {
+                mMaxTabWidth = (int) (MeasureSpec.getSize(widthMeasureSpec) * 0.4f);
+            } else {
+                mMaxTabWidth = MeasureSpec.getSize(widthMeasureSpec) / 2;
+            }
+        } else {
+            mMaxTabWidth = -1;
+        }
 
-	/**
-	 * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� sp 鐨勫崟浣� 杞垚涓� px(鍍忕礌)
-	 */
-	public static int spToPixels(int sp, Context context) {
-		Resources r = context.getResources();
-		float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp,
-				r.getDisplayMetrics());
-		return (int) px;
-	}
+        final int oldWidth = getMeasuredWidth();
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        final int newWidth = getMeasuredWidth();
 
-	/**
-	 * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� dp 鐨勫崟浣� 杞垚涓� px(鍍忕礌)
-	 */
-	public static int dipToPixels(int dip, Context context) {
-		Resources r = context.getResources();
-		float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip,
-				r.getDisplayMetrics());
-		return (int) px;
-	}
+        if (lockedExpanded && oldWidth != newWidth) {
+            // Recenter the tab display if we're at a new (scrollable) size.
+            setCurrentItem(mSelectedTabIndex);
+        }
+    }
 
-	@Override
-	public void onAttachedToWindow() {
-		super.onAttachedToWindow();
-		if (mTabSelector != null) {
-			// Re-post the selector we saved
-			post(mTabSelector);
-		}
-	}
+    /**
+     * 鍗曚釜Tab
+     *
+     * @param position
+     */
+    @SuppressLint("ResourceAsColor")
+    private void animateToTab(final int position) {
+        final View tabView = mTabLayout.getChildAt(position);
+        if (mTabSelector != null) {
+            removeCallbacks(mTabSelector);
+        }
+        for (int i = 0; i < mTabLayout.getChildCount(); i++) {
+            ((TextView) mTabLayout.getChildAt(i)).setTextSize(15);
+            if (i == textSpecialColorPosition) {
+                ((TextView) mTabLayout.getChildAt(i)).setTextColor(textSpecialColor);
+            } else {
+                ((TextView) mTabLayout.getChildAt(i)).setTextColor(textColor);
+            }
+            ((TextView) mTabLayout.getChildAt(i)).setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
+        }
+        ((TextView) tabView).setTextColor(highLightTextColor);
+        ((TextView) tabView).setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
+        ((TextView) tabView).setTextSize(20);
+//        ((TextView) tabView).setLayoutParams(new ViewGroup.LayoutParams(WRAP_CONTENT,WRAP_CONTENT));
+        mTabSelector = new Runnable() {
+            public void run() {
+                final int scrollPos = tabView.getLeft()
+                        - (getWidth() - tabView.getWidth()) / 2;
+                smoothScrollTo(scrollPos, 0);
 
-	@Override
-	public void onDetachedFromWindow() {
-		super.onDetachedFromWindow();
-		if (mTabSelector != null) {
-			removeCallbacks(mTabSelector);
-		}
-	}
+                mTabSelector = null;
+            }
+        };
+        post(mTabSelector);
+    }
 
-	/**
-	 * 娣诲姞tabView
-	 * 
-	 * @param index
-	 * @param text
-	 * @param iconResId
-	 */
-	@SuppressLint("ResourceAsColor")
-	private void addTab(int index, CharSequence text, int iconResId) {
-		final TabView tabView = new TabView(getContext());
-		tabView.mIndex = index;
-		tabView.setFocusable(true);
-		tabView.setOnClickListener(mTabClickListener);
-		tabView.setText(text);
-		tabView.setTextColor(R.color.black1);
 
-		if (iconResId != 0) {
-			tabView.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0);
-		}
-		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,
-				MATCH_PARENT, 1);
+    @Override
+    public void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        if (mTabSelector != null) {
+            // Re-post the selector we saved
+            post(mTabSelector);
+        }
+    }
 
-		mTabLayout.addView(tabView, params);
-	}
+    @Override
+    public void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        if (mTabSelector != null) {
+            removeCallbacks(mTabSelector);
+        }
+    }
 
-	@Override
-	public void onPageScrollStateChanged(int arg0) {
-		if (mListener != null) {
-			mListener.onPageScrollStateChanged(arg0);
-		}
-	}
+    /**
+     * 娣诲姞tabView
+     *
+     * @param index
+     * @param text
+     * @param iconResId
+     */
+    @SuppressLint("ResourceAsColor")
+    private void addTab(int index, CharSequence text, int iconResId) {
+        final TabView tabView = new TabView(getContext());
+        tabView.setPadding(0, 0, 0, 0);
+        tabView.mIndex = index;
+        tabView.setFocusable(true);
+        tabView.setOnClickListener(mTabClickListener);
+        tabView.setText(text);
+        if (textColor > 0) {
+            if (index == textSpecialColorPosition) {
+                tabView.setTextColor(textSpecialColor);
+            } else
+                tabView.setTextColor(textColor);
+        } else {
+            tabView.setTextColor(R.color.black1);
+        }
+        tabView.setBackgroundColor(Color.TRANSPARENT);
 
-	@Override
-	public void onPageScrolled(int arg0, float arg1, int arg2) {
-		if (mListener != null) {
-			mListener.onPageScrolled(arg0, arg1, arg2);
-		}
-	}
+        if (iconResId != 0) {
+            tabView.setCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0);
+        }
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(WRAP_CONTENT,
+                WRAP_CONTENT, 1);
+        mTabLayout.addView(tabView, params);
+        MarginLayoutParams marginLayoutParams = (MarginLayoutParams) tabView.getLayoutParams();
+        if (index == 0)
+            marginLayoutParams.leftMargin = DimenUtils.dip2px(getContext(), 10);
+        else {
+            marginLayoutParams.leftMargin = DimenUtils.dip2px(getContext(), 13);
+        }
 
-	@Override
-	public void onPageSelected(int arg0) {
-		setCurrentItem(arg0);
-		if (mListener != null) {
-			mListener.onPageSelected(arg0);
-		}
-	}
+        if (index == mTabLayout.getChildCount() - 1) {
+            marginLayoutParams.rightMargin = DimenUtils.dip2px(getContext(), 10);
+        }
+    }
 
-	@Override
-	public void setViewPager(ViewPager view) {
-		if (mViewPager != null) {
-			mViewPager.setOnPageChangeListener(null);
-		}
-		final PagerAdapter adapter = view.getAdapter();
-		if (adapter == null) {
-			throw new IllegalStateException(
-					"ViewPager does not have adapter instance.");
-		}
-		mViewPager = view;
-		view.setOnPageChangeListener(this);
-		notifyDataSetChanged();
-	}
+    @Override
+    public void onPageScrollStateChanged(int arg0) {
+        if (mListener != null) {
+            mListener.onPageScrollStateChanged(arg0);
+        }
+    }
 
-	public void notifyDataSetChanged() {
-		mTabLayout.removeAllViews();
-		PagerAdapter adapter = mViewPager.getAdapter();
-		IconPagerAdapter iconAdapter = null;
-		if (adapter instanceof IconPagerAdapter) {
-			iconAdapter = (IconPagerAdapter) adapter;
-		}
-		final int count = adapter.getCount();
-		for (int i = 0; i < count; i++) {
-			CharSequence title = adapter.getPageTitle(i);
-			if (title == null) {
-				title = EMPTY_TITLE;
-			}
-			int iconResId = 0;
-			if (iconAdapter != null) {
-				iconResId = iconAdapter.getIconResId(i);
-			}
-			addTab(i, title, iconResId);
-		}
-		if (mSelectedTabIndex > count) {
-			mSelectedTabIndex = count - 1;
-		}
-		setCurrentItem(mSelectedTabIndex);
-		requestLayout();
-	}
+    @Override
+    public void onPageScrolled(int arg0, float arg1, int arg2) {
+        if (mListener != null) {
+            mListener.onPageScrolled(arg0, arg1, arg2);
+        }
+    }
 
-	@Override
-	public void setViewPager(ViewPager view, int initialPosition) {
-		setViewPager(view);
-		setCurrentItem(initialPosition);
-	}
+    @Override
+    public void onPageSelected(int arg0) {
+        setCurrentItem(arg0);
+        if (mListener != null) {
+            mListener.onPageSelected(arg0);
+        }
+    }
 
-	/**
-	 * 璁剧疆褰撳墠Item
-	 */
-	@Override
-	public void setCurrentItem(int item) {
-		if (mViewPager == null) {
-			throw new IllegalStateException("ViewPager has not been bound.");
-		}
-		mSelectedTabIndex = item;
-		mViewPager.setCurrentItem(item);
+    @Override
+    public void setViewPager(ViewPager view) {
+        if (mViewPager != null) {
+            mViewPager.setOnPageChangeListener(null);
+        }
+        final PagerAdapter adapter = view.getAdapter();
+        if (adapter == null) {
+            throw new IllegalStateException(
+                    "ViewPager does not have adapter instance.");
+        }
+        mViewPager = view;
+        view.setOnPageChangeListener(this);
+        notifyDataSetChanged();
+    }
 
-		final int tabCount = mTabLayout.getChildCount();
-		for (int i = 0; i < tabCount; i++) {
-			final View child = mTabLayout.getChildAt(i);
-			final boolean isSelected = (i == item);
-			child.setSelected(isSelected);
-			if (isSelected) {
-				animateToTab(item);
-			}
-		}
-	}
+    public void notifyDataSetChanged() {
+        mTabLayout.removeAllViews();
+        PagerAdapter adapter = mViewPager.getAdapter();
+        IconPagerAdapter iconAdapter = null;
+        if (adapter instanceof IconPagerAdapter) {
+            iconAdapter = (IconPagerAdapter) adapter;
+        }
+        final int count = adapter.getCount();
+        for (int i = 0; i < count; i++) {
+            CharSequence title = adapter.getPageTitle(i);
+            if (title == null) {
+                title = EMPTY_TITLE;
+            }
+            int iconResId = 0;
+            if (iconAdapter != null) {
+                iconResId = iconAdapter.getIconResId(i);
+            }
+            addTab(i, title, iconResId);
+        }
+        if (mSelectedTabIndex > count) {
+            mSelectedTabIndex = count - 1;
+        }
+        setCurrentItem(mSelectedTabIndex);
+        requestLayout();
+    }
 
-	@Override
-	public void setOnPageChangeListener(OnPageChangeListener listener) {
-		mListener = listener;
-	}
+    @Override
+    public void setViewPager(ViewPager view, int initialPosition) {
+        setViewPager(view);
+        setCurrentItem(initialPosition);
+    }
 
-	/**
-	 * 閲嶅啓textview
-	 * 
-	 * @author weikou2015
-	 * 
-	 */
-	private class TabView extends TextView {
-		private int mIndex;
+    /**
+     * 璁剧疆褰撳墠Item
+     */
+    @Override
+    public void setCurrentItem(int item) {
+        if (mViewPager == null) {
+            throw new IllegalStateException("ViewPager has not been bound.");
+        }
+        mSelectedTabIndex = item;
+        mViewPager.setCurrentItem(item);
 
-		public TabView(Context context) {
-			super(context, null, R.attr.vpiTabPageIndicatorStyle);
-		}
+        final int tabCount = mTabLayout.getChildCount();
+        for (int i = 0; i < tabCount; i++) {
+            final View child = mTabLayout.getChildAt(i);
+            final boolean isSelected = (i == item);
+            child.setSelected(isSelected);
+            if (isSelected) {
+                animateToTab(item);
+            }
+        }
+    }
 
-		@Override
-		public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-			super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    @Override
+    public void setOnPageChangeListener(OnPageChangeListener listener) {
+        mListener = listener;
+    }
 
-			// Re-measure if we went beyond our maximum size.
-			if (mMaxTabWidth > 0 && getMeasuredWidth() > mMaxTabWidth) {
-				super.onMeasure(MeasureSpec.makeMeasureSpec(mMaxTabWidth,
-						MeasureSpec.EXACTLY), heightMeasureSpec);
-			}
-		}
+    /**
+     * 閲嶅啓textview
+     *
+     * @author weikou2015
+     */
+    private class TabView extends TextView {
+        private int mIndex;
 
-		public int getIndex() {
-			return mIndex;
-		}
-	}
+        public TabView(Context context) {
+            super(context, null, R.attr.vpiTabPageIndicatorStyle);
+        }
+
+        @Override
+        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+            // Re-measure if we went beyond our maximum size.
+            if (mMaxTabWidth > 0 && getMeasuredWidth() > mMaxTabWidth) {
+                super.onMeasure(MeasureSpec.makeMeasureSpec(mMaxTabWidth,
+                        MeasureSpec.EXACTLY), heightMeasureSpec);
+            }
+        }
+
+        public int getIndex() {
+            return mIndex;
+        }
+    }
 }

--
Gitblit v1.8.0