static Flake createFlake ( float xRange , Bitmap originalBitmap ) { Flake flake = new Flake ( ) ; // Size each flake with a width between 5 and 55 and a proportional height flake . width = ( int ) ( 5 + ( float ) Math . random ( ) * 50 ) ; float hwRatio = originalBitmap . getHeight ( ) / originalBitmap . getWidth ( ) ; flake . height = ( int ) ( flake . width * hwRatio ) ; // Position the flake horizontally between the left and right of the range flake . x = ( float ) Math . random ( ) * ( xRange - flake . width ) ; // Position the flake vertically slightly off the top of the display flake . y = 0 - ( flake . height + ( float ) Math . random ( ) * flake . height ) ; // Each flake travels at 50-200 pixels per second flake . speed = 50 + ( float ) Math . random ( ) * 150 ; // Flakes start at -90 to 90 degrees rotation, and rotate between -45 and 45 // degrees per second flake . rotation = ( float ) Math . random ( ) * 180 - 90 ; flake . rotationSpeed = ( float ) Math . random ( ) * 90 - 45 ; // Get the cached bitmap for this size if it exists, otherwise create and cache one flake . bitmap = bitmapMap . get ( flake . width ) ; if ( flake . bitmap == null ) { flake . bitmap = Bitmap . createScaledBitmap ( originalBitmap , ( int ) flake . width , ( int ) flake . height , true ) ; bitmapMap . put ( flake . width , flake . bitmap ) ; } return flake ; }
Creates a new droidflake in the given xRange and with the given bitmap . Parameters of location size rotation and speed are randomly determined .