package com.sxjs.common.widget.bottomnavigation; import android.animation.ValueAnimator; import android.annotation.TargetApi; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.support.v4.graphics.drawable.DrawableCompat; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; /** * Class description * * @author ashokvarma * @version 1.0 * @see FrameLayout * @since 19 Mar 2016 */ class BottomNavigationTab extends FrameLayout { protected int paddingTopActive; protected int paddingTopInActive; protected int mPosition; protected int mActiveColor; protected int mInActiveColor; protected int mBackgroundColor; protected int mActiveWidth; protected int mInActiveWidth; protected Drawable mCompactIcon; protected Drawable mCompactInActiveIcon; protected boolean isInActiveIconSet = false; protected String mLabel; protected BadgeItem badgeItem; boolean isActive = false; View containerView; TextView labelView; ImageView iconView; TextView badgeView; public BottomNavigationTab(Context context) { super(context); init(); } public BottomNavigationTab(Context context, AttributeSet attrs) { super(context, attrs); init(); } public BottomNavigationTab(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public BottomNavigationTab(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } void init() { setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)); } public void setActiveWidth(int activeWidth) { mActiveWidth = activeWidth; } public void setInactiveWidth(int inactiveWidth) { mInActiveWidth = inactiveWidth; ViewGroup.LayoutParams params = getLayoutParams(); params.width = mInActiveWidth; setLayoutParams(params); } public void setIcon(Drawable icon) { mCompactIcon = DrawableCompat.wrap(icon); } public void setInactiveIcon(Drawable icon) { mCompactInActiveIcon = DrawableCompat.wrap(icon); isInActiveIconSet = true; } public void setLabel(String label) { mLabel = label; labelView.setText(label); } public void setActiveColor(int activeColor) { mActiveColor = activeColor; } public int getActiveColor() { return mActiveColor; } public void setInactiveColor(int inActiveColor) { mInActiveColor = inActiveColor; labelView.setTextColor(inActiveColor); } public void setItemBackgroundColor(int backgroundColor) { mBackgroundColor = backgroundColor; } public void setPosition(int position) { mPosition = position; } public void setBadgeItem(BadgeItem badgeItem) { this.badgeItem = badgeItem; } public int getPosition() { return mPosition; } public void select(boolean setActiveColor, int animationDuration) { isActive = true; ValueAnimator animator = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { animator = ValueAnimator.ofInt(containerView.getPaddingTop(), paddingTopActive); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { containerView.setPadding(containerView.getPaddingLeft(), (Integer) valueAnimator.getAnimatedValue(), containerView.getPaddingRight(), containerView.getPaddingBottom()); } } }); animator.setDuration(animationDuration); animator.start(); } iconView.setSelected(true); if (setActiveColor) { labelView.setTextColor(mActiveColor); } else { labelView.setTextColor(mBackgroundColor); } if (badgeItem != null) { badgeItem.select(); } } public void unSelect(boolean setActiveColor, int animationDuration) { isActive = false; ValueAnimator animator = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { animator = ValueAnimator.ofInt(containerView.getPaddingTop(), paddingTopInActive); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { containerView.setPadding(containerView.getPaddingLeft(), (Integer) valueAnimator.getAnimatedValue(), containerView.getPaddingRight(), containerView.getPaddingBottom()); } } }); animator.setDuration(animationDuration); animator.start(); } labelView.setTextColor(mInActiveColor); iconView.setSelected(false); if (badgeItem != null) { badgeItem.unSelect(); } } public void initialise(boolean setActiveColor) { iconView.setSelected(false); if (isInActiveIconSet) { StateListDrawable states = new StateListDrawable(); states.addState(new int[]{android.R.attr.state_selected}, mCompactIcon); states.addState(new int[]{-android.R.attr.state_selected}, mCompactInActiveIcon); states.addState(new int[]{}, mCompactInActiveIcon); iconView.setImageDrawable(states); } else { if (setActiveColor) { DrawableCompat.setTintList(mCompactIcon, new ColorStateList( new int[][]{ new int[]{android.R.attr.state_selected}, //1 new int[]{-android.R.attr.state_selected}, //2 new int[]{} }, new int[]{ mActiveColor, //1 mInActiveColor, //2 mInActiveColor //3 } )); } else { DrawableCompat.setTintList(mCompactIcon, new ColorStateList( new int[][]{ new int[]{android.R.attr.state_selected}, //1 new int[]{-android.R.attr.state_selected}, //2 new int[]{} }, new int[]{ mBackgroundColor, //1 mInActiveColor, //2 mInActiveColor //3 } )); } iconView.setImageDrawable(mCompactIcon); } } }