要在Android Exoplayer中显示当前位置文本中的毫秒数,您可以使用ExoPlayer的EventListener来监听播放进度,并将毫秒数转换为文本显示出来。以下是解决方法的代码示例:
首先,在您的Activity或Fragment中,实例化ExoPlayer并设置EventListener:
private ExoPlayer exoPlayer;
private PlayerView playerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化ExoPlayer
exoPlayer = ExoPlayerFactory.newSimpleInstance(this);
playerView = findViewById(R.id.player_view);
playerView.setPlayer(exoPlayer);
// 设置播放进度监听
exoPlayer.addListener(new Player.EventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_READY && playWhenReady) {
// 开始播放
} else if (playbackState == Player.STATE_READY) {
// 暂停播放
}
}
@Override
public void onPositionDiscontinuity(int reason) {
// 播放位置发生变化
updateCurrentPosition();
}
});
}
然后,编写一个方法来更新当前位置文本:
private void updateCurrentPosition() {
long currentPosition = exoPlayer.getCurrentPosition();
String currentPositionText = formatTime(currentPosition);
// 将当前位置文本显示到UI上
positionTextView.setText(currentPositionText);
}
private String formatTime(long milliseconds) {
// 将毫秒数转换为文本格式,例如:00:00:10
long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds) % 60;
long minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds) % 60;
long hours = TimeUnit.MILLISECONDS.toHours(milliseconds);
return String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, minutes, seconds);
}
最后,在合适的时机调用updateCurrentPosition()方法来更新当前位置文本。例如,在播放开始和播放暂停时调用该方法:
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_READY && playWhenReady) {
// 开始播放
updateCurrentPosition();
} else if (playbackState == Player.STATE_READY) {
// 暂停播放
updateCurrentPosition();
}
}
请注意,上述代码示例假设您已经在布局文件中定义了一个包含id为player_view
的PlayerView
和一个用于显示当前位置的TextView
。您可以根据自己的需求进行调整。