@Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){
  mWidth=MeasureSpec.getSize(widthMeasureSpec);
  mHeight=MeasureSpec.getSize(heightMeasureSpec);
  int minSide=Math.min(mWidth,mHeight);
  mWidth=minSide;
  mHeight=minSide;
  mCurrentProgressPosition=calculateCurrentPositionFromCurrentSeconds(mCurrentSeconds);
  objectAnimatorProgress.setFloatValues(mCurrentProgressPosition / mWidth,1.0f);
  objectAnimatorProgress.setDuration((mMaxSeconds - mCurrentSeconds) * 1000);
  if (mBitmapCoverImage != null)   scaleCoverBitmap(mBitmapCoverImage);
  rectFEmptyProgress.set(0,mHeight - mProgressHeight,mWidth,mHeight);
  mDrawableBottomShadow.setBounds(0,(10 * mHeight) / 12,mWidth,mHeight);
  if (startRequested) {
    startRequested=false;
    start();
  }
  super.onMeasure(widthMeasureSpec,heightMeasureSpec);
}

@ Override protected void onMeasure ( int widthMeasureSpec , int heightMeasureSpec ) { mWidth = MeasureSpec . getSize ( widthMeasureSpec ) ; mHeight = MeasureSpec . getSize ( heightMeasureSpec ) ; int minSide = Math . min ( mWidth , mHeight ) ; mWidth = minSide ; mHeight = minSide ; mCurrentProgressPosition = calculateCurrentPositionFromCurrentSeconds ( mCurrentSeconds ) ; objectAnimatorProgress . setFloatValues ( mCurrentProgressPosition / mWidth , 1.0f ) ; objectAnimatorProgress . setDuration ( ( mMaxSeconds - mCurrentSeconds ) * 1000 ) ; if ( mBitmapCoverImage != null ) scaleCoverBitmap ( mBitmapCoverImage ) ; rectFEmptyProgress . set ( 0 , mHeight - mProgressHeight , mWidth , mHeight ) ; mDrawableBottomShadow . setBounds ( 0 , ( 10 * mHeight ) / 12 , mWidth , mHeight ) ; if ( startRequested ) { startRequested = false ; start ( ) ; } super . onMeasure ( widthMeasureSpec , heightMeasureSpec ) ; }
calculate witdh , height and region values here
