Я работаю над приложением для видеоплеера, где я использую MediaPlayer
и SurfaceView
для управления воспроизведением видео. Все в порядке, но моя проблема в том, что мне нужно реализовать полноэкранную функцию, когда пользователь нажимает кнопку полноэкранного режима, чтобы открыть полноэкранный проигрыватель с контроллерами (например: воспроизведение, пауза, панель поиска и т. д.). Я хочу то же самое, что и полноэкранная функция Youtube. Как я могу это сделать ?
Файл макета ->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="match_parent"/>
<com.ssl.testvideo.FontAwesome
android:id="@+id/btnPayPause"
android:textColor="#fff"
android:layout_centerInParent="true"
android:text=""
android:textSize="45sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="40dp">
<TextView
android:id="@+id/timeForMediaPlayer"
android:textStyle="bold"
android:textColor="#fff"
android:gravity="center"
android:layout_gravity="center_vertical"
android:text="00:00:00"
android:layout_width="60dp"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/progressBar"
android:layout_marginRight="10dp"
android:layout_gravity="center_vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<com.ssl.testvideo.FontAwesome
android:id="@+id/fullScreen"
android:layout_marginLeft="10dp"
android:layout_gravity="center_vertical"
android:textSize="20sp"
android:textColor="#fff"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
который выглядит так ->
Кроме того, Активность ->
public class PlayerActivity extends Activity
implements SurfaceHolder.Callback {
Uri targetUri;
MediaPlayer mediaPlayer;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean pausing = false;
boolean isFirstTime = true;
private SeekBar progressBar;
private FontAwesome fullScreen;
private FontAwesome btnPayPause;
private TextView timeForMediaPlayer;
Timer mTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.playerlayout);
initialize();
targetUri = Uri.parse("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setFixedSize(176, 144);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mediaPlayer = new MediaPlayer();
mediaPlayer.setScreenOnWhilePlaying(true);
btnPayPause.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (pausing) {
pausing = false;
mediaPlayer.start();
} else {
if (isFirstTime) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(surfaceHolder);
try {
mediaPlayer.setDataSource(getApplicationContext(), targetUri);
mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
isFirstTime = false;
} else {
pausing = true;
mediaPlayer.pause();
}
}
}
});
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
progressBar.setSecondaryProgress(percent);
}
});
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
new Thread(runnable).start();
}
});
progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (mediaPlayer != null && fromUser) {
int timeToSet = (mediaPlayer.getDuration() * progress) / 100;
mediaPlayer.seekTo(timeToSet);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
fullScreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
int currentTime = mediaPlayer.getCurrentPosition();
int percent = ( 100 * currentTime) / mediaPlayer.getDuration();
progressBar.setProgress(percent);
final String timeToShow = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(currentTime),
TimeUnit.MILLISECONDS.toMinutes(currentTime) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(currentTime)),
TimeUnit.MILLISECONDS.toSeconds(currentTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(currentTime)));
runOnUiThread(new Runnable() {
@Override
public void run() {
timeForMediaPlayer.setText(timeToShow);
}
});
}
}
};
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mediaPlayer.release();
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
private void initialize() {
timeForMediaPlayer = (TextView) findViewById(R.id.timeForMediaPlayer);
progressBar = (SeekBar) findViewById(R.id.progressBar);
fullScreen = (FontAwesome) findViewById(R.id.fullScreen);
btnPayPause = (FontAwesome) findViewById(R.id.btnPayPause);
}
}
я использую этот учебник реализовать видеоплеер. мне нужно только реализовать полноэкранную функцию.
ПОЖАЛУЙСТА, НЕ ПРЕДЛАГАЙТЕ МНЕ ЛЮБЫЕ СТОРОННИЕ БИБЛИОТЕКИ