I found ray-casting method unreliable but I ended up using the PolyUtil
from google maps.
You need the dependency compile 'com.google.maps.android:android-maps-utils:0.5'
And then the method looks like this
PolyUtil.containsLocation(userLocation, polyPointsList, false);
EDIT
This is the description of this method found in source code
Computes whether the given point lies inside the specified polygon. The polygon is always considered closed, regardless of whether the last point equals the first or not. Inside is defined as not containing the South Pole -- the South Pole is always outside. The polygon is formed of great circle segments if geodesic is true, and of rhumb (loxodromic) segments otherwise.