question: private void smoothSnapToPosition ( int scrollY , int availableScrollHeight , AlphabeticalAppsList . FastScrollSectionInfo info ) { mRv . removeCallbacks ( mSmoothSnapNextFrameRunnable ) ; mRv . removeCallbacks ( mFastScrollToTargetSectionRunnable ) ; trackAllChildViews ( ) ; if ( mHasFastScrollTouchSettled ) { mCurrentFastScrollSection = info . sectionName ; mTargetFastScrollSection = null ; updateTrackedViewsFastScrollFocusState ( ) ; } else { mCurrentFastScrollSection = null ; mTargetFastScrollSection = info . sectionName ; mHasFastScrollTouchSettled = false ; updateTrackedViewsFastScrollFocusState ( ) ; mRv . postDelayed ( mFastScrollToTargetSectionRunnable , mHasFastScrollTouchSettledAtLeastOnce ? REPEAT_TOUCH_SETTLING_DURATION : INITIAL_TOUCH_SETTLING_DURATION ) ; } int newScrollY = Math . min ( availableScrollHeight , mRv . getPaddingTop ( ) + mRv . getTop ( info . fastScrollToItem . rowIndex ) ) ; int numFrames = mFastScrollFrames . length ; for ( int i = 0 ; i < numFrames ; i ++ ) { mFastScrollFrames [ i ] = ( newScrollY - scrollY ) / numFrames ; } mFastScrollFrameIndex = 0 ; mRv . postOnAnimation ( mSmoothSnapNextFrameRunnable ) ; }
target:  Smoothly snaps to a given position.  We do this manually by calculating the keyframes ourselves and animating the scroll on the recycler view.