2013-07-11 3 views
8

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

check snap shot

Я проверил мое приложение на 2 устройства

1) Samsung N-8000 (таблетка)

2) Lenovo-800

video.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#ffffff" 
android:gravity="center"> 

<VideoView 
    android:id="@+id/vvSplash" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:background="#00ffffff"> 
</VideoView> 

</LinearLayout> 

код активность:

private VideoView vd; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.video); 
    vd = (VideoView) findViewById(R.id.vvSplash); 
    playVideo(); 
} 

private void playVideo() { 
    Uri uri = Uri.parse("android.resource://" + getPackageName() +"/"+ R.raw.intro); 
    vd.setVideoURI(uri); 
    vd.setMediaController(null); 
    vd.start();  
} 

Любая помощь будет оценена. Спасибо.

+0

@Piotr Chojnacki спасибо за отредактированной вопрос .. :) – TheFlash

+0

Добро пожаловать! –

+0

Я также сталкиваюсь с той же проблемой, что и ваша. Как вы решили эту проблему? – VickyS

ответ

8

Как смешно это звучит, но ответ здесь:

Повторяю решение , престиж тем, кто узнал:

<SurfaceView 
    android:layout_width="0px" 
    android:layout_height="0px" 
    android:visibility="gone" /> 

Это ОЧЕНЬ ВАЖНО, что вы добавляете вид поверхности к виду корня в вашей деятельности, а не непосредственный вышестоящий. Иначе это не сработает.

+0

U r right..going to accept .. :) – TheFlash

+2

Это не исправляет проблему на Android 5.1. – user2966445

+0

Это не работает. –

2

Я также столкнулся с такой же проблемой, но решил ее, изменив параметр макета видеоизображения из содержимого оболочки в соответствии с родительским. Также вам нужно удалить свойство фона для просмотра видео из XML. Я надеюсь, что это сработает для вас

+0

спасибо за ответ. Я попытаюсь принять, если он сработает. :) – TheFlash

+0

Я протестировал, что вы сказали, но не работали. в любом случае спасибо и +1 от меня. – TheFlash

+0

Я играл в видео, и по завершении я делал миниатюру над видео, но я получал эти черные мерцания, когда видео начиналось и заканчивалось, прочитав этот пост, я попытался установить фон видео на thumbnail и POOF, больше никаких проблем. Спасибо, +1. – Korebian

0

Просто удалите следующую строку из своего xml.

android:background="#00ffffff" 

Это поможет :)

+0

Я решил свою проблему. В любом случае спасибо за ваш ответ. – TheFlash

1

Для людей в будущем: Эта уродливая ошибка, похоже, решена в Зефир. В моей работе мы развиваемся с помощью Xamarin (так, в основном, все взгляды добавляются программно). У нас есть куча тестовых устройств, и я в основном работал с устройством Marshmallow, поэтому я никогда не замечал этого черного мерцания при создании страницы, над которой я работал. После окончательного тестирования с помощью устройства Lollipop я заметил это мерцание.

К сожалению, у меня нет решения. Нам нужно, чтобы наше приложение было как можно более кросс-платформенным, поэтому использование макета xml не рекомендуется/грубо.

+1

Вместо этого это можно сделать в Java-коде. См. Мой ответ, http://stackoverflow.com/a/37966446/38557. – noamtm

0

Для тех, кто все еще сталкивается с проблемой и не знает, как использовать приведенный выше ответ. Он просто копирует этот код и вставляет его в основной макет мероприятия, который вы используете videoview в основном (первом) макете.

<SurfaceView 
    android:layout_width="0px" 
    android:layout_height="0px" 
    android:visibility="gone" /> 

в моем случае

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Mainframlayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/facebookbgcolor" > 
<SurfaceView 
    android:layout_width="0px" 
    android:layout_height="0px" 
    android:visibility="gone" /> 
.....rest of the layout 
0

адаптированного XML, на основе решения от https://stackoverflow.com/a/27307286/38557 использовать Java-код. Поместите это в onCreateView фрагмента(), перед накачиванием макета:

// Add a SurfaceView to prevent flickering when the video is loaded later. 
SurfaceView surfaceView = new SurfaceView(getActivity()); 
surfaceView.setVisibility(View.GONE); 
container.addView(surfaceView, new ViewGroup.LayoutParams(0, 0)); 

Он делает то же самое, и может быть использован, когда вы не можете или не хотите, чтобы изменить XMLs.

1

Если ваш вопрос VideoViewмерцающий, когда кнопка назад нажата, просто установите VideoView видимость INVISIBLE или GONE в onBackPressed() методе вашей деятельности перед вызовом супер реализации.

Если пользователь может выйти через кнопку «вверх», перехватывают android.R.home вариант пункт, чтобы скрыть VideoView.

Вот пример в Котлин:

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { 
    android.R.id.home -> super.onOptionsItemSelected(item).also { 
     video_view.visibility = GONE // Hide videoView before leaving to avoid flickering 
    } 
    R.id.action_share -> consume { shareVideo() } // Your regular menu options 
    else -> super.onOptionsItemSelected(item) 
} 

override fun onBackPressed() { 
    video_view.visibility = GONE // Hide videoView before leaving to avoid flickering 
    super.onBackPressed() 
} 
Смежные вопросы