package com.example.wandaojiaindex;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.animation.AlphaAnimation;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.wandaojiaindex.MyScrollView.OnScrollChangedListener;

/**
 * 
 * @author Darcy
 *
 */
public class MainActivity extends Activity implements OnScrollChangedListener, OnTouchListener,OnClickListener{

	private ViewPager mMainVewPager;
	
	private MyScrollView mSvMain;
	private View mVHeaderContainer;
	private View mVSearchBar;
	
	private View mVMainNav;
	private View mVMainNavLeftContainer;
	private RadioGroup mVMNavMidTGroup;
	private View mVMNavRightContainer;
	private RadioButton mVMainNavIndex;
	private RadioButton mVMainNavDiscover;
	private RadioButton mVMainNavBlog;
	private RadioButton mVMainNavMine;
	private RadioButton mVMainNavMore;
	
	private View mVIndexHeaderNav;
	private View mVIndexNavDiscover;
	private View mVIndexNavBlog;
	private View mVIndexNavMine;
	private View mVIndexNavMore;
	private ImageView mIvIndexNavDiscover;
	private ImageView mIvIndexNavBlog;
	private ImageView mIvIndexNavMine;
	private ImageView mIvIndexNavMore;
	private TextView mTvIndexNavDiscover;
	private TextView mTvIndexNavBlog;
	private TextView mTvIndexNavMine;
	private TextView mTvIndexNavMore;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_index);
		initView();
	}
	
	private void initView(){
		mSvMain = (MyScrollView) findViewById(R.id.main_sv);
		mMainVewPager = (ViewPager) findViewById(R.id.main_viewPager);
		
		mVHeaderContainer = findViewById(R.id.header_container);
		
		mVIndexHeaderNav = ViewFinder.findViewById(mVHeaderContainer,R.id.index_header_nav);
		mVIndexNavDiscover = ViewFinder.findViewById(mVIndexHeaderNav,R.id.discover_item);
		mVIndexNavBlog = ViewFinder.findViewById(mVIndexHeaderNav,R.id.blog_item);
		mVIndexNavMine = ViewFinder.findViewById(mVIndexHeaderNav,R.id.mine_item);
		mVIndexNavMore = ViewFinder.findViewById(mVIndexHeaderNav,R.id.more_item);
		
		mTvIndexNavDiscover = ViewFinder.findViewById(mVIndexNavDiscover,R.id.nav_text_tv);
		mTvIndexNavBlog = ViewFinder.findViewById(mVIndexNavBlog,R.id.nav_text_tv);
		mTvIndexNavMine = ViewFinder.findViewById(mVIndexNavMine,R.id.nav_text_tv);
		mTvIndexNavMore = ViewFinder.findViewById(mVIndexNavMore,R.id.nav_text_tv);
		mIvIndexNavDiscover = ViewFinder.findViewById(mVIndexNavDiscover,R.id.nav_icon_iv);
		mIvIndexNavBlog = ViewFinder.findViewById(mVIndexNavBlog,R.id.nav_icon_iv);
		mIvIndexNavMine = ViewFinder.findViewById(mVIndexNavMine,R.id.nav_icon_iv);
		mIvIndexNavMore = ViewFinder.findViewById(mVIndexNavMore,R.id.nav_icon_iv);
		
		mVSearchBar = ViewFinder.findViewById(mVHeaderContainer,R.id.search_bar);
		
		mVMainNav = findViewById(R.id.main_nav);
		mVMNavRightContainer = ViewFinder.findViewById(mVMainNav,R.id.right_container);
		mVMainNavLeftContainer = ViewFinder.findViewById(mVMainNav,R.id.main_nav_layout);
		mVMNavMidTGroup = ViewFinder.findViewById(mVMainNav,R.id.middle_tab_group);
		mVMainNavIndex = ViewFinder.findViewById(mVMainNav,R.id.main_tab_index);
		mVMainNavDiscover = ViewFinder.findViewById(mVMainNav,R.id.main_tab_ranking);
		mVMainNavBlog  = ViewFinder.findViewById(mVMainNav,R.id.main_tab_blog);
		mVMainNavMine = ViewFinder.findViewById(mVMainNav,R.id.main_tab_mine);
		mVMainNavMore = ViewFinder.findViewById(mVMainNav,R.id.main_tab_more);
		mVMainNavIndex.setOnClickListener(this);
		mVMainNavDiscover.setOnClickListener(this);
		mVMainNavBlog.setOnClickListener(this);
		mVMainNavMine.setOnClickListener(this);
		mVMainNavMore.setOnClickListener(this);
		
		mSvMain.setOnScrollChangedListener(this);
		mSvMain.setOnTouchListener(this);
	}

	@Override
	public void onClick(View v) {
		switch(v.getId()){
		case R.id.main_tab_index:
			mSvMain.setVisibility(View.VISIBLE);
			mMainVewPager.setVisibility(View.GONE);
			RadioButton rbChild;
			for(int childIndex = 0 ; childIndex< mVMNavMidTGroup.getChildCount(); childIndex++){
				rbChild = (RadioButton) mVMNavMidTGroup.getChildAt(childIndex);
				rbChild.setChecked(false);
			}
			
			break;
		case R.id.main_tab_ranking:
			mSvMain.setVisibility(View.GONE);
			mVMainNavIndex.setChecked(false);
			mVMainNavDiscover.setChecked(true);
			mMainVewPager.setVisibility(View.VISIBLE);
			break;
		}
	}

	private boolean mIsInitFactor = false;
	
	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		super.onWindowFocusChanged(hasFocus);
		if(!mIsInitFactor){
			int mMainNavHeight = mVMainNav.getBottom();
			int mSearchBarTop = mVSearchBar.getTop();
			int mSearchBarButtom = mVSearchBar.getBottom();
			int mIndexNavTop = mVIndexHeaderNav.getTop();
			int mTextFadeDis = getResources().getDimensionPixelSize(R.dimen.app_padding);
			int mVMainNavIndexWidth = mVMainNavIndex.getWidth();
			int mVIndexHeaderNavBottom = mVIndexHeaderNav.getBottom();
			int mMNRightContainerWidth = mVMNavRightContainer.getWidth();
			
			mMaxScrollTop = mVIndexHeaderNavBottom;
			
			mTextFadeEndScrollTop = (int) (mSearchBarTop - mMainNavHeight * 0.5f);
			mTextFadeBeginScrollTop = mTextFadeEndScrollTop - mTextFadeDis;
			mTextFadeFactor = 255.0f / mTextFadeDis;
			mCurrentTextAlpha = 255;
			
			mMainNavFadeBeginScrollTop = mTextFadeEndScrollTop;
			mMainNavFadeEndScrollTop = mMainNavFadeBeginScrollTop + mMainNavHeight;
			mCurrentMainNavAlpha = 0.0f;
			mMainNavFadeFactor = 1.0f / mMainNavHeight;
			changeMainNavAlpha(0);
			
			mIndexNavZoomBeginScrollTop = mSearchBarButtom - mMainNavHeight;
			mIndexNavZoomEndScrollTop = mIndexNavTop - mMainNavHeight;
			float zoomDistance = mIndexNavZoomEndScrollTop - mIndexNavZoomBeginScrollTop;
			mFinalIndexNavPaddingLeft = mVMainNavIndex.getWidth();
			mFinalIndexNavPaddingRight = (mVIndexHeaderNav.getRight() - mVMainNavLeftContainer.getWidth());
			mIndexNavMoveLeftFactor = mFinalIndexNavPaddingLeft / zoomDistance;
			mIndexNavMoveRightFactor =  mFinalIndexNavPaddingRight / zoomDistance;
			
			mMainNavTranBeginScrollTop = mIndexNavZoomEndScrollTop;
			mMainNavTranEndScrollTop  = mIndexNavZoomEndScrollTop + mMainNavHeight;
			mOrginMNavIndexMarginLeft = -mVMainNavIndexWidth;
			mOrginMNavMidTGroupMarginTop = mMainNavHeight;
			mOrginMNavRightContainerMarginRight = -mMNRightContainerWidth;
			mMNavIndexFactor = mVMainNavIndexWidth / (float)mMainNavHeight;
			mMNavRightContainerFactor = mMNRightContainerWidth / (float)mMainNavHeight;
			mMNavMidTGroupFactor = 1.0f;
			mCurrentMNavIndexMarginLeft = mOrginMNavIndexMarginLeft;
			mCurrentMNavMidTGroupMarginTop = mOrginMNavMidTGroupMarginTop;
			mCurrentMNavRightContainerMarginRight = mOrginMNavRightContainerMarginRight;
			setLeftMargin(mVMainNavIndex, mCurrentMNavIndexMarginLeft);
			setRightMargin(mVMNavRightContainer, mOrginMNavRightContainerMarginRight);
			setTopMargin(mVMNavMidTGroup, mOrginMNavMidTGroupMarginTop);
			
			mIsInitFactor = true;
		}
	}
	
	private int mMaxScrollTop;
	private int mScrollerOldNewTop;
	@Override
	public void onScrollChanged(int newLeft, int newTop, int oldLeft, int oldTop) {
		
		if(mScrollerOldNewTop == newTop || oldTop > mMaxScrollTop){
			return;
		}
		mScrollerOldNewTop = newTop;
		
		fadeTextOnScroll(newLeft, newTop, oldLeft, oldTop);
	
		fadeMainNavOnScroll(newLeft, newTop, oldLeft, oldTop);
	
		zoomIndexNavOnScroll(newLeft, newTop, oldLeft, oldTop);
	
		transferMainNavOnScroll(newLeft, newTop, oldLeft, oldTop);
	}

	private int mTextFadeBeginScrollTop;
	private int mTextFadeEndScrollTop;
	private float mTextFadeFactor;
	private int mCurrentTextAlpha;
	
	/**
	 * 文字随着活动逐步消失或者显示
	 */
	private void fadeTextOnScroll(int newLeft, int newTop, int oldLeft, int oldTop){
		//上滑上界
		if(newTop >= mTextFadeEndScrollTop){
			mCurrentTextAlpha = 0;
			changeIndexNavTextAlpha(0);
			return;
		}
		
		//下滑下界
		if(newTop <= mTextFadeBeginScrollTop){
			mCurrentTextAlpha = 255;
			changeIndexNavTextAlpha(255);
			return;
		}
		
		//上滑下交界
		if(mTextFadeBeginScrollTop<oldTop && newTop >mTextFadeBeginScrollTop){
			mCurrentTextAlpha = (int) (255 - (newTop - mTextFadeBeginScrollTop) * mTextFadeFactor);
			ensureFadeTextAlphaRight(newTop, oldTop);
			changeIndexNavTextAlpha(mCurrentTextAlpha);
			return;
		}
		
		//下滑上交界
		if(mTextFadeEndScrollTop < oldTop && newTop < mTextFadeEndScrollTop){
			mCurrentTextAlpha = (int) ((mTextFadeEndScrollTop - oldTop) * mTextFadeFactor);
			ensureFadeTextAlphaRight(newTop, oldTop);
			changeIndexNavTextAlpha(mCurrentTextAlpha);
			return;
		}
		
		//中间状态
		if( mTextFadeBeginScrollTop <= oldTop && oldTop <= mTextFadeEndScrollTop){
			mCurrentTextAlpha = (int) (mCurrentTextAlpha - (newTop - oldTop) * mTextFadeFactor);
			ensureFadeTextAlphaRight(newTop, oldTop);
			changeIndexNavTextAlpha(mCurrentTextAlpha);
		}
	}
	
	private void ensureFadeTextAlphaRight(int newTop,int oldTop){
		if(newTop > oldTop){
			mCurrentTextAlpha = mCurrentTextAlpha < 0? 0: mCurrentTextAlpha;
		}else{
			mCurrentTextAlpha = mCurrentTextAlpha > 255? 255: mCurrentTextAlpha;
		}
	}
	
	private int mMainNavFadeBeginScrollTop;
	private int mMainNavFadeEndScrollTop;
	private float mMainNavFadeFactor;
	private float mCurrentMainNavAlpha;
	/**
	 * 主导航条消失或者显示
	 */
	private void fadeMainNavOnScroll(int newLeft, int newTop, int oldLeft, int oldTop){
		//上滑上界
		if(newTop >= mMainNavFadeEndScrollTop){
			changeMainNavAlpha(1.0f);
			mCurrentMainNavAlpha = 1.0f;
			return;
		}
		//下滑下界
		if(newTop <=  mMainNavFadeBeginScrollTop){
			changeMainNavAlpha(0.0f);
			mCurrentMainNavAlpha = 0.0f;
			return;
		}
		
		//上滑下交界
		if(mMainNavFadeBeginScrollTop > oldTop && newTop >mMainNavFadeBeginScrollTop){
			mCurrentMainNavAlpha = (newTop - mMainNavFadeBeginScrollTop) * mMainNavFadeFactor;
			System.out.println("newTop :" +newTop + ",oldTop :" +oldTop + "mCurrentMainNavAlpha :"+mCurrentMainNavAlpha);
			ensureFadeMainNavAlphaRight(newTop,oldTop);
			changeMainNavAlpha(mCurrentMainNavAlpha);
			return;
		}
		
		//下滑上交界
		if(mMainNavFadeEndScrollTop <oldTop && newTop < mMainNavFadeEndScrollTop){
			mCurrentMainNavAlpha = 1.0f - (mMainNavFadeEndScrollTop - newTop)* mMainNavFadeFactor;
			ensureFadeMainNavAlphaRight(newTop,oldTop);
			changeMainNavAlpha(mCurrentMainNavAlpha);
			return;
		}
		
		//中间状态
		if( mMainNavFadeBeginScrollTop <= oldTop && oldTop <= mMainNavFadeEndScrollTop){
			mCurrentMainNavAlpha = mCurrentMainNavAlpha + (newTop - oldTop) * mMainNavFadeFactor;
			ensureFadeMainNavAlphaRight(newTop,oldTop);
			changeMainNavAlpha(mCurrentMainNavAlpha);
		}
	}
	
	private void ensureFadeMainNavAlphaRight(int newTop,int oldTop){
		if(newTop > oldTop){
			mCurrentMainNavAlpha = mCurrentMainNavAlpha > 1? 1: mCurrentMainNavAlpha;
		}else{
			mCurrentMainNavAlpha = mCurrentMainNavAlpha < 0? 0: mCurrentMainNavAlpha;
		}
	}
	
	private int mIndexNavZoomBeginScrollTop;
	private int mIndexNavZoomEndScrollTop;
	private float mIndexNavMoveLeftFactor;
	private float mIndexNavMoveRightFactor;
	private int mFinalIndexNavPaddingLeft;
	private int mFinalIndexNavPaddingRight;
	private int mCurrentIndexNavPaddingLeft;
	private int mCurrentIndexNavPaddingRight;
	/**
	 * 缩放首页导航条
	 */
	private void zoomIndexNavOnScroll(int newLeft, int newTop, int oldLeft, int oldTop){
		
		//上滑上界
		if(newTop >= mIndexNavZoomEndScrollTop){
			changeIndexNavPadding(mFinalIndexNavPaddingLeft, mFinalIndexNavPaddingRight);
			mCurrentIndexNavPaddingLeft = mFinalIndexNavPaddingLeft;
			mCurrentIndexNavPaddingRight = mFinalIndexNavPaddingRight;
			return;
		} 
		
		//下滑下界
		if(newTop <= mIndexNavZoomBeginScrollTop){
			changeIndexNavPadding(0, 0);
			mCurrentIndexNavPaddingLeft = 0;
			mCurrentIndexNavPaddingRight = 0;
			return;
		}
		
		//上滑下交界
		if( mIndexNavZoomBeginScrollTop > oldTop && newTop > mIndexNavZoomBeginScrollTop){
			mCurrentIndexNavPaddingLeft = (int) ((newTop - mIndexNavZoomBeginScrollTop) * mIndexNavMoveLeftFactor);
			mCurrentIndexNavPaddingRight = (int) ((newTop - mIndexNavZoomBeginScrollTop) * mIndexNavMoveRightFactor);
			ensureIndexNavPaddingRight(newTop, oldTop);
			changeIndexNavPadding(mCurrentIndexNavPaddingLeft, mCurrentIndexNavPaddingRight);
			return;
		}
		
		//下滑上交界
		if( mIndexNavZoomBeginScrollTop < oldTop && newTop <mIndexNavZoomBeginScrollTop){
			mCurrentIndexNavPaddingLeft = (int) (mFinalIndexNavPaddingLeft - (mIndexNavZoomBeginScrollTop-newTop)*mIndexNavMoveLeftFactor);
			mCurrentIndexNavPaddingRight = (int) (mCurrentIndexNavPaddingRight - (mIndexNavZoomBeginScrollTop-newTop)*mIndexNavMoveRightFactor);
			ensureIndexNavPaddingRight(newTop, oldTop);
			changeIndexNavPadding(mCurrentIndexNavPaddingLeft, mCurrentIndexNavPaddingRight);
			return;
		}
		
		//中间状态
		if( mIndexNavZoomBeginScrollTop <= oldTop && oldTop <= mIndexNavZoomEndScrollTop){
			mCurrentIndexNavPaddingLeft = (int) (mCurrentIndexNavPaddingLeft + (newTop - oldTop) * mIndexNavMoveLeftFactor);
			mCurrentIndexNavPaddingRight = (int) (mCurrentIndexNavPaddingRight + (newTop - oldTop) * mIndexNavMoveRightFactor);
			ensureIndexNavPaddingRight(newTop, oldTop);
			changeIndexNavPadding(mCurrentIndexNavPaddingLeft, mCurrentIndexNavPaddingRight);
		}
	}
	
	private void ensureIndexNavPaddingRight(int newTop, int oldTop){
		if(newTop > oldTop){
			mCurrentIndexNavPaddingLeft = mCurrentIndexNavPaddingLeft > mFinalIndexNavPaddingLeft? mFinalIndexNavPaddingLeft: mCurrentIndexNavPaddingLeft;
			mCurrentIndexNavPaddingRight = mCurrentIndexNavPaddingRight > mFinalIndexNavPaddingRight? mFinalIndexNavPaddingRight: mCurrentIndexNavPaddingRight;
		}else{
			mCurrentIndexNavPaddingLeft = mCurrentIndexNavPaddingLeft < 0? 0: mCurrentIndexNavPaddingLeft;
			mCurrentIndexNavPaddingRight = mCurrentIndexNavPaddingRight < 0? 0: mCurrentIndexNavPaddingRight;
		}
	}
	
	private int mMainNavTranBeginScrollTop;
	private int mMainNavTranEndScrollTop;
	private float mMNavIndexFactor;
	private float mMNavMidTGroupFactor;
	private float mMNavRightContainerFactor;
	private int mOrginMNavIndexMarginLeft;
	private int mOrginMNavMidTGroupMarginTop;
	private int mOrginMNavRightContainerMarginRight;
	private int mCurrentMNavIndexMarginLeft;
	private int mCurrentMNavMidTGroupMarginTop;
	private int mCurrentMNavRightContainerMarginRight;
	
	/**
	 * 移动主导航栏的元素
	 */
	private void transferMainNavOnScroll(int newLeft, int newTop, int oldLeft, int oldTop){
		
		//上滑上界
		if(newTop >= mMainNavTranEndScrollTop){
			mCurrentMNavIndexMarginLeft = 0;
			mCurrentMNavMidTGroupMarginTop = 0;
			mCurrentMNavRightContainerMarginRight = 0;
			setLeftMargin(mVMainNavIndex, 0);
			setTopMargin(mVMNavMidTGroup, 0);
			setRightMargin(mVMNavRightContainer, mCurrentMNavRightContainerMarginRight);
			return;
		}
		
		//下滑下界
		if(newTop <= mMainNavTranBeginScrollTop){
			mCurrentMNavIndexMarginLeft = mOrginMNavIndexMarginLeft;
			mCurrentMNavMidTGroupMarginTop = mOrginMNavMidTGroupMarginTop;
			mCurrentMNavRightContainerMarginRight = mOrginMNavRightContainerMarginRight;
			setLeftMargin(mVMainNavIndex, mOrginMNavIndexMarginLeft);
			setTopMargin(mVMNavMidTGroup, mOrginMNavMidTGroupMarginTop);
			setRightMargin(mVMNavRightContainer, mCurrentMNavRightContainerMarginRight);
			return;
		}
		
		//上滑下交界
		if(mMainNavTranBeginScrollTop > oldTop && newTop > mMainNavTranBeginScrollTop){
			mCurrentMNavIndexMarginLeft = (int) (mOrginMNavIndexMarginLeft + (newTop - mMainNavTranBeginScrollTop) * mMNavIndexFactor);
			mCurrentMNavMidTGroupMarginTop = (int) (mOrginMNavMidTGroupMarginTop - (newTop - mMainNavTranBeginScrollTop) * mMNavMidTGroupFactor);
			mCurrentMNavRightContainerMarginRight = (int) (mOrginMNavRightContainerMarginRight -   (newTop - mMainNavTranBeginScrollTop) * mMNavRightContainerFactor);
			ensureTransferMainNavRight(newTop, oldTop);
			setLeftMargin(mVMainNavIndex, mCurrentMNavIndexMarginLeft);
			setTopMargin(mVMNavMidTGroup, mOrginMNavMidTGroupMarginTop);
			setRightMargin(mVMNavRightContainer, mCurrentMNavRightContainerMarginRight);
			return;
		}
		
		//下滑上交界
		if(mMainNavTranEndScrollTop<oldTop && newTop < mMainNavTranEndScrollTop){
			mCurrentMNavIndexMarginLeft = (int) ((newTop - mMainNavTranEndScrollTop) * mMNavIndexFactor);
			mCurrentMNavMidTGroupMarginTop = (int) ((mMainNavTranEndScrollTop - newTop) * mMNavMidTGroupFactor);
			mCurrentMNavRightContainerMarginRight = (int) ((newTop - mMainNavTranEndScrollTop) * mMNavRightContainerFactor);
			ensureTransferMainNavRight(newTop, oldTop);
			setLeftMargin(mVMainNavIndex, mCurrentMNavIndexMarginLeft);
			setTopMargin(mVMNavMidTGroup, mOrginMNavMidTGroupMarginTop);
			setRightMargin(mVMNavRightContainer, mCurrentMNavRightContainerMarginRight);
			return;
		}
		
		//中间
	    if( mMainNavTranBeginScrollTop < oldTop && oldTop <= mMainNavTranEndScrollTop){
			mCurrentMNavIndexMarginLeft = (int) (mCurrentMNavIndexMarginLeft + (newTop - oldTop) * mMNavIndexFactor);
			mCurrentMNavMidTGroupMarginTop = (int) (mCurrentMNavMidTGroupMarginTop - (newTop - oldTop) *mMNavMidTGroupFactor);
			mCurrentMNavRightContainerMarginRight = (int) (mCurrentMNavRightContainerMarginRight + (newTop - oldTop) *mMNavRightContainerFactor);
			ensureTransferMainNavRight(newTop, oldTop);
			setLeftMargin(mVMainNavIndex, mCurrentMNavIndexMarginLeft);
			setTopMargin(mVMNavMidTGroup, mCurrentMNavMidTGroupMarginTop);
			setRightMargin(mVMNavRightContainer, mCurrentMNavRightContainerMarginRight);
		}
	}
	
	private void ensureTransferMainNavRight(int newTop, int oldTop){
		if(newTop > oldTop){
			mCurrentMNavIndexMarginLeft = mCurrentMNavIndexMarginLeft > 0? 0: mCurrentMNavIndexMarginLeft;
			mCurrentMNavRightContainerMarginRight = mCurrentMNavRightContainerMarginRight >0 ? 0 :mCurrentMNavRightContainerMarginRight;
			mCurrentMNavMidTGroupMarginTop = mCurrentMNavMidTGroupMarginTop < 0? 0: mCurrentMNavMidTGroupMarginTop;
		}else{
			mCurrentMNavIndexMarginLeft = mCurrentMNavIndexMarginLeft < mOrginMNavIndexMarginLeft ? mOrginMNavIndexMarginLeft : mCurrentMNavIndexMarginLeft;
			mCurrentMNavRightContainerMarginRight = mCurrentMNavRightContainerMarginRight < mOrginMNavRightContainerMarginRight ? mOrginMNavRightContainerMarginRight : mCurrentMNavRightContainerMarginRight;
			mCurrentMNavMidTGroupMarginTop = mCurrentMNavMidTGroupMarginTop > mOrginMNavMidTGroupMarginTop ? mOrginMNavMidTGroupMarginTop : mCurrentMNavMidTGroupMarginTop;
		}
	}
	
	private void changeIndexNavTextAlpha(int alpha){
		setViewTextAlpha(mTvIndexNavDiscover,alpha);
		setViewTextAlpha(mTvIndexNavBlog,alpha);
		setViewTextAlpha(mTvIndexNavMine,alpha);
		setViewTextAlpha(mTvIndexNavMore,alpha);
	}
	
	private void changeMainNavAlpha(float alpha){
		setViewAlpha(mVMainNav, alpha);
	}
	
	private void changeIndexNavPadding(int paddingLeft, int paddingRight){
		mVIndexHeaderNav.setPadding(paddingLeft, mVIndexHeaderNav.getPaddingTop(), paddingRight, mVIndexHeaderNav.getPaddingBottom());
	}
	
	private void setViewTextAlpha(TextView v ,int alpha){
		ColorStateList colorStateList = v.getTextColors();
		v.setTextColor(colorStateList.withAlpha(alpha));
	}
	
	@SuppressLint("NewApi")
	private void setViewAlpha(View v, float alpha){
		if(android.os.Build.VERSION.SDK_INT >= 11){
			v.setAlpha(alpha);
		}else{
			AlphaAnimation alphaAnim = new AlphaAnimation(alpha, alpha);
			alphaAnim.setDuration(0);
			alphaAnim.setFillAfter(true);
			v.startAnimation(alphaAnim);
		}
	}
	
	private void setLeftMargin(View v, int leftMargin){
		RelativeLayout.LayoutParams lp = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
		lp.leftMargin = leftMargin;
		v.setLayoutParams(lp);
	}
	
	private void setTopMargin(View v, int topMargin){
		RelativeLayout.LayoutParams lp = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
		lp.topMargin = topMargin;
		v.setLayoutParams(lp);
	}
	
	private void setRightMargin(View v, int rightMargin){
		RelativeLayout.LayoutParams lp = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();
		lp.rightMargin = rightMargin;
		v.setLayoutParams(lp);
	}

	private final static int MSG_PULL_RECOVER = 0x999;
	
	private Handler mHandler = new Handler(){
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case MSG_PULL_RECOVER:
				int upY = mSvMain.getScrollY();
				int divideScrollY  = mMaxScrollTop /2;
				if(upY<= divideScrollY){
					hideMainNav();
				}else if(upY < mMaxScrollTop){
					showMainNav();
				}
				break;
			default:
				break;
			}
		}
	};
	
	@Override
	public boolean onTouch(View v, MotionEvent event) {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
		if(event.getAction() == MotionEvent.ACTION_UP){
			mHandler.removeMessages(MSG_PULL_RECOVER);
			mHandler.sendEmptyMessageDelayed(MSG_PULL_RECOVER, 200);
		}
		return false;
	}
	
	private void showMainNav(){
		fadeTextOnScroll(0, mMaxScrollTop, 0, mMaxScrollTop);
		fadeMainNavOnScroll(0, mMaxScrollTop, 0, mMaxScrollTop);
		zoomIndexNavOnScroll(0, mMaxScrollTop, 0, mMaxScrollTop);
		transferMainNavOnScroll(0, mMaxScrollTop, 0, mMaxScrollTop);
		mSvMain.scrollTo(0, mMaxScrollTop);
	}
	
	private void hideMainNav(){
		fadeTextOnScroll(0, 0, 0, 0);
		fadeMainNavOnScroll(0, 0, 0, 0);
		zoomIndexNavOnScroll(0, 0, 0, 0);
		transferMainNavOnScroll(0, 0, 0, 0);
		mSvMain.scrollTo(0, 0);
	}

}