Хобрук: Ваш путь к мастерству в программировании

Как сделать полноэкранный вид в андроиде

Я работаю над приложением для видеоплеера, где я использую 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="&#xf04b;"
            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="&#xf0b2;"
                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);
    }
}

я использую этот учебник реализовать видеоплеер. мне нужно только реализовать полноэкранную функцию.

ПОЖАЛУЙСТА, НЕ ПРЕДЛАГАЙТЕ МНЕ ЛЮБЫЕ СТОРОННИЕ БИБЛИОТЕКИ


  • Пробовали ли вы MediaController: stackoverflow.com/a/6869615/295004 developer.android.com/reference/android/widget/ 05.06.2016
  • У меня нет проблем с воспроизведением/паузой или проблемами, связанными с паром. Эта часть сделана. Моя единственная проблема - сделать полноэкранный режим. 05.06.2016
  • Вы видели: developer.android.com/training/system-ui/immersive. html 05.06.2016
  • Да, но проблема в том, что мне нужно повернуть полный экран, а не причастие. Скажем, у меня есть макет проигрывателя вверху макета и ListView внизу, тогда я не хочу вращать список. Мне нужно только повернуть SurfaceView, который воспроизводит представление. 05.06.2016

Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...