question: private void updateArcViewPositions ( ) { float halfWidth = getWidth ( ) / 2 ; double radius = getWidth ( ) * 2 ; double powRadius = radius * radius ; double rotation ; float halfViewWidth ; double deltaX ; double deltaY ; int viewPosition ; for ( int count = getChildCount ( ) , i = 0 ; i < count ; i ++ ) { View view = getChildAt ( i ) ; rotation = 0 ; halfViewWidth = view . getWidth ( ) / 2 ; view . setPivotX ( halfViewWidth ) ; view . setPivotY ( view . getHeight ( ) ) ; if ( settings . isFanRadiusEnable ( ) ) { deltaX = halfWidth - getDecoratedLeft ( view ) - halfViewWidth ; deltaY = radius - Math . sqrt ( powRadius - deltaX * deltaX ) ; view . setTranslationY ( ( float ) deltaY ) ; rotation = ( Math . toDegrees ( Math . asin ( ( radius - deltaY ) / radius ) ) - 90 ) * Math . signum ( deltaX ) ; } viewPosition = getPosition ( view ) ; Double baseViewRotation = viewRotationsMap . get ( viewPosition ) ; if ( baseViewRotation == null ) { baseViewRotation = random . nextDouble ( ) * settings . getAngleItemBounce ( ) * 2 - settings . getAngleItemBounce ( ) ; viewRotationsMap . put ( viewPosition , baseViewRotation ) ; } view . setRotation ( ( float ) ( rotation + baseViewRotation ) ) ; } }
target:  Change pivot, rotation, translation for view to create fan effect. Change rotation to create bounce effect.