package com.sxjs.common.widget.bottomnavigation; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; import android.widget.ImageView; import android.widget.TextView; import com.sxjs.common.R; /** * Class description * * @author ashokvarma * @version 1.0 * @see BottomNavigationTab * @since 19 Mar 2016 */ class ShiftingBottomNavigationTab extends BottomNavigationTab { public ShiftingBottomNavigationTab(Context context) { super(context); } public ShiftingBottomNavigationTab(Context context, AttributeSet attrs) { super(context, attrs); } public ShiftingBottomNavigationTab(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public ShiftingBottomNavigationTab(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override void init() { paddingTopActive = (int) getResources().getDimension(R.dimen.shifting_height_top_padding_active); paddingTopInActive = (int) getResources().getDimension(R.dimen.shifting_height_top_padding_inactive); LayoutInflater inflater = LayoutInflater.from(getContext()); View view = inflater.inflate(R.layout.shifting_bottom_navigation_item, this, true); containerView = view.findViewById(R.id.shifting_bottom_navigation_container); labelView = (TextView) view.findViewById(R.id.shifting_bottom_navigation_title); iconView = (ImageView) view.findViewById(R.id.shifting_bottom_navigation_icon); badgeView = (TextView) view.findViewById(R.id.shifting_bottom_navigation_badge); super.init(); } @Override public void select(boolean setActiveColor, int animationDuration) { super.select(setActiveColor, animationDuration); ResizeWidthAnimation anim = new ResizeWidthAnimation(this, mActiveWidth); anim.setDuration(animationDuration); this.startAnimation(anim); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { labelView.animate().scaleY(1).scaleX(1).setDuration(animationDuration).start(); } } @Override public void unSelect(boolean setActiveColor, int animationDuration) { super.unSelect(setActiveColor, animationDuration); ResizeWidthAnimation anim = new ResizeWidthAnimation(this, mInActiveWidth); anim.setDuration(animationDuration); this.startAnimation(anim); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { labelView.animate().scaleY(0).scaleX(0).setDuration(0).start(); } } // @Override // public void initialise(boolean setActiveColor) { // super.initialise(setActiveColor); // } public class ResizeWidthAnimation extends Animation { private int mWidth; private int mStartWidth; private View mView; public ResizeWidthAnimation(View view, int width) { mView = view; mWidth = width; mStartWidth = view.getWidth(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { mView.getLayoutParams().width = mStartWidth + (int) ((mWidth - mStartWidth) * interpolatedTime); mView.requestLayout(); } // @Override // public void initialize(int width, int height, int parentWidth, int parentHeight) { // super.initialize(width, height, parentWidth, parentHeight); // } @Override public boolean willChangeBounds() { return true; } } }