#java #android-studio #android-mediaplayer #surfaceview #android-seekbar
#java #android-studio #android-mediaplayer #surfaceview #android-seekbar
Вопрос:
Я пытаюсь создать видеоплеер с помощью SurfaceView, и там будет кнопка воспроизведения/паузы, а также панель поиска. Мое видео воспроизводится плавно, но всякий раз, когда я пытаюсь использовать код updateSeekBar, который я использовал для своего музыкального плеера, видео застревает (не может работать должным образом). Итак, есть ли какой-то другой способ обновить прогресс панели поиска или мне нужно внести некоторые изменения в мой текущий код?
Пользовательский интерфейс моего приложения:
Мой код:
SurfaceView surfaceView; MediaPlayer mediaPlayer; ImageButton imageButton; CardView cardView; SeekBar seekBar; Runnable runnable; Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageButton = findViewById(R.id.imageButton); cardView = findViewById(R.id.cardViewButton); seekBar = findViewById(R.id.seekBar); surfaceView = findViewById(R.id.surfaceView); mediaPlayer = MediaPlayer.create(this, R.raw.vid); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { surfaceView.setKeepScreenOn(true); SurfaceHolder surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) { mediaPlayer.setDisplay(surfaceHolder); } @Override public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) { } }); seekBar.setMax(mediaPlayer.getDuration()); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { mediaPlayer.seekTo(i); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } }); imageButton.setBackgroundResource(R.drawable.ic_play); imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); imageButton.setBackgroundResource(R.drawable.ic_play); } else { mediaPlayer.start(); imageButton.setBackgroundResource(R.drawable.ic_pause); } } }); handler = new Handler(); updateSeekBar(); } private void updateSeekBar() { int currentPosition = mediaPlayer.getCurrentPosition(); seekBar.setProgress(currentPosition); runnable = new Runnable() { @Override public void run() { updateSeekBar(); } }; handler.postDelayed(runnable, 0); }