Android VideoView: просмотр видео намного более темный в диалоговом представлении - PullRequest
21 голосов
/ 09 марта 2011

Привет всем У меня проблема с встраиванием просмотра видео в диалоговое представление

все работает отлично, за исключением того, что видео, отображаемое в диалоге, намного темнее, чем при отображении в остальной части действия

есть идеи?

вот код

button1main.setOnClickListener(new OnClickListener() {

                public VideoView videoView = null;
                @Override
                public void onClick(View v) {
                    //set up dialog
                    Dialog dialog = new Dialog(CustomDialog.this);
                    dialog.setContentView(R.layout.maindialog);
                    //dialog.setTitle("This is my custom dialog box");
                    dialog.setCancelable(true);


                    this.videoView = (VideoView) dialog.findViewById(R.id.video);
                    VideoPlayer vp = new VideoPlayer(this.videoView, null);
                    vp.playVideo();

                    //set up button
                    Button button = (Button) dialog.findViewById(R.id.Button01);
                    button.setOnClickListener(new OnClickListener() {
                    @Override
                        public void onClick(View v) {
                            finish();
                        }
                    });
                    //now that the dialog is set up, it's time to show it    
                    dialog.show();
                }
            });

Ответы [ 5 ]

62 голосов
/ 05 мая 2011

кажется, что VideoView становится недоступным, потому что он создан за окном. Решение Джейсона Роджерса работает, но означает, что область за диалоговым окном не будет затемнена.

Я использовал

mVideoView.setZOrderOnTop(true);

, чтобы вывести VideoView на передний план, чтобы он не затемнялся, но все равно все, что находится за диалоговым окном, будет.

17 голосов
/ 15 апреля 2011

Я действительно нашел решение для этого (или, по крайней мере, в моем случае)

кажется, что это ошибка от Android, когда за Диалогом создается Видеообзор, и когда Диалог открывается, он затемняет фоновые изображения, включая видео

примененное мной "быстрое исправление"

WindowManager.LayoutParams a = dialog.getWindow().getAttributes();
a.dimAmount = 0;
dialog.getWindow().setAttributes(a);

они могут быть лучшим решением, как передача контекста диалогового окна вместо использования одного и того же контекста для создания диалога и просмотра видео (позже я проверю, получу ли я время)

2 голосов
/ 11 апреля 2018

Я попробовал это исправление и обнаружил, что оно работает.

Используйте следующий стиль в диалоговом окне для удаления стандартного поведения затемнения окна, поэтому VideoView / SurfaceView также не имеет поведения затемнения.

<item name="android:backgroundDimEnabled">false</item>

Затем в методе onViewCreated диалога установите программный фон для достижения эффекта затемнения.

getDialog().getWindow().getDecorView().
            findViewById(android.R.id.content).
            setBackgroundResource(android.R.drawable.screen_background_dark_transparent);
2 голосов
/ 13 апреля 2013

Хотя предложенный пространственный подход работает, единственная проблема возникает, если вы когда-либо захотите установить для ZOrderOnTop значение false после установки его в значение true. Кажется, когда-то установлено, это всегда правда.

Недавно я столкнулся с той же проблемой (видео в окне), и я неохотно исправил ее, пытаясь очистить FLAG_DIM_BEHIND, чтобы видео было «ярким». Я получил тусклый эффект, просто сделав диалоговое окно полноэкранным и установив фон в «тусклый цвет», если это имеет смысл.

Подробнее: Что касается медиа-контроллера, я не мог найти способ вывести его в начало диалога. В итоге я создал собственный макет элементов управления мультимедиа и поместил его поверх просмотра видео. Это важно в этом контексте, так как вызов setZOrderOnTop не позволит вам поместить контроллер мультимедиа поверх просмотра видео.

Надеюсь, что это имело смысл и помогает кому-то.

0 голосов
/ 18 сентября 2017

Еще одно простое решение - добавьте это к своим стилям, оно отключит тусклый фон.

<item name="android:backgroundDimEnabled">false</item>
...