To implement a custom floor selector we expect you to already have a View with a Map using MapControl. Show a map
Start by creating a class, in this example named; CustomFloorSelector. Extend the class with FrameLayout and implement MPFloorSelectorInterface as well as it's methods.
We also need to implement a simple view to show the current floor and allow the user to select another floor. We will do this by creating a simple Button that when clicked creates a drop down allowing the user to select any floor.
We can now start implementing logic into our CustomFloorSelector class. We will start by implementing the methods from the MPFloorSelectorInterface. We start by adding a HashMap<Int, MPFloor> to the class to keep track of the current floors. We populate the list when setList is called. We add a OnFloorSelectionChangedListener, so that we can notify when floors have changed in the UI. For the show we will ignore the animated bool, to keep it simple and we just toggle the visibility for this example. We will ignore the zoomLevelChanged method in this example, but it allows you to implement logic in the custom floor selector based on the current zoom level. For this example we will allow AutoFloorChanges, the setUserPositionFloor can be used to keep track of the current floor of the user, if using any type of indoor positioning service, together with MapsIndoors. For this example, we will save the user location, but will not add any logic based on it.
For the remaining methods we need to modify the UI, so we will start implementing the UI first. Inside the init we will inflate the view and store and hold a reference to it, to return inside the getViewmethod. We will also create a reference to the Button that we implemented. The floorBtn needs to open a dropdown when clicked we will do this with a PopupMenu that is ordered by the floor index. When a MenuItem is clicked we use the itemId to retrieve the correct floor from the floor map. When that is retrieved we update the floorBtn text, for the now selected floor, as well as calling onFloorSelectionChanged with the selected floor. For the map to update and reflect the action.
Now all that is left is adding this view component to your layout containing the map and adding it to your MPMapConfig when creating MapControl. Here is an example layout where the floor selector is added to a layout.