How to make such a custom marker?

Firstly use BitmapDescriptorFactory.fromResource(id goes here)
Then add marker to the map using
Marker marker = GoogleMap.addMarker(new MarkerOptions().position(latLng)
.icon(BitmapDescriptorFactory.fromResource(id goes here));
For the text you can use
marker.setTitle(string); //text on top
marker.setSnippet(string); //text below the title