2013-07-11 128 views
8

我面臨奇怪的閃爍問題,使用VideoView。當活動開始時,它會導致次要的小部分閃爍。然後,視頻開始播放。它在視頻的頂部和底部顯示2條黑線。請參閱下面的快照。VideoView閃爍問題

check snap shot

我已經測試我的應用程序上2個設備

1)三星正8000(平板)

2)聯想-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

你正確..正在接受.. :) – TheFlash

+2

這不能解決Android 5.1上的問題。 – user2966445

+0

這不起作用了。 –

2

我也面臨同樣的問題,但解決了它通過從wrap內容更改videoview的佈局參數來匹配父項。你還需要從XML中刪除視頻視圖的背景屬性。我希望它能爲你工作

+0

謝謝你的回答。我會嘗試接受,如果它的工作.. :) – TheFlash

+0

我已經測試了你說什麼,但沒有工作。無論如何感謝和從我+1。 – TheFlash

+0

我正在播放視頻,完成後我在視頻上放了一個縮略圖,但是當視頻開始並結束時,我正在看到這些黑色閃爍,在閱讀本文後,我試圖將視頻的背景設置爲縮略圖和POOF,沒有更多的問題。謝謝,+1。 – Korebian

0

只需從您的XML中刪除以下行。

android:background="#00ffffff" 

它會幫助你:)

+0

我解決了我的問題。無論如何感謝您的回答。 – TheFlash

1

對於未來的人:這個醜陋的錯誤似乎已經在棉花糖中得到了解決。在我的工作中,我們正在開發Xamarin(所以,基本上,所有視圖都是以編程方式添加的)。我們有一堆測試設備,而且我主要使用棉花糖設備,所以在構建我正在處理的頁面時,我從未注意到這種黑色閃爍。在用棒棒糖設備進行測試後,我注意到這種閃爍。

不幸的是我沒有解決方案。我們需要我們的應用程序儘可能跨平臺,因此使用佈局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

改編自https://stackoverflow.com/a/27307286/38557基於XML的解決方案中使用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)); 

它做同樣的事情,並且可以使用,當你不能或不想改個XML。

1

如果您的問題VideoView閃爍時,後退按鈕調用超級實施前按,只是你VideoView可見性設置爲INVISIBLEGONE在活動的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() 
}