Most devices don’t have an aspect ratio of 16/9, and in a lot of use-cases such as portrait mode, the app allows for PlayerView
dimensions that are very far from 16/9. In this case, the player has to use only a part of the screen to display the video, while the PlayerView
and SubtitleView
remain adapted to the space they have in the app.
This may cause subtitles not to be hovering the video properly, which might result in weird results especially when the subtitle positioning varies along the stream.
A way to avoid this is to add some padding to the SubtitleView
, to make sure the subtitle will be overing the video at all time. The horizontal or vertical padding will need to be recalculated at each layout change.
Example :
subtitleView.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
// This block will be called every time layout changes for subtitleView.
float aspectRatio = (float) subtitleView.getWidth() / subtitleView.getHeight();
if (aspectRatio < (16f / 9f)) {
float padding = subtitleView.getHeight() - 0.5f * aspectRatio * subtitleView.getHeight();
int roundedPadding = Math.round(padding/2);
subtitleView.setPadding(0, roundedPadding, 0, roundedPadding); // Top padding only
} else if (aspectRatio > (16f / 9f)) {
float padding = subtitleView.getWidth() - 0.5f * aspectRatio * subtitleView.getWidth();
int roundedPadding = Math.round(padding);
subtitleView.setPadding(roundedPadding, 0, roundedPadding, 0); // Horizontal padding only
}
});
(based on https://github.com/bitmovin/bitmovin-player-android-samples/tree/main/CustomUiSubtitleView)
Before (no padding)
After (with SubtitleView padding)