2013-07-11 34 views
8

VideoViewを使用して、ちらつきの奇妙な問題に直面しています。アクティビティが開始されると、1秒間にわずかなフリッカーが発生します。その後、ビデオが開始されます。ビデオの上部と下部に2本の黒い線が表示されます。以下のスナップショットを参照してください。VideoViewの点滅の問題

check snap shot

は、私は2つのデバイス

1)サムスンのn-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

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

+2

これはAndroid 5.1での問題を修正しません。 – user2966445

+0

これはもう動作しません。 –

2

私も同じ問題に直面しましたが、videoviewのレイアウトパラメータをラップコンテンツから親と一致するように変更することで解決しました。また、XMLからビデオビューの背景プロパティを削除する必要があります。私はあなたのために働くことを願っています

+0

答えてくれてありがとう。私は試してみればうまくいく。:) – TheFlash

+0

私はあなたが言っているが動作していないものをテストした。とにかく感謝し、私の+1。 – TheFlash

+0

私はビデオを再生していましたが、完成時にサムネイルをビデオに貼り付けていましたが、これらの黒いちらつきが出ていました。ビデオを開始したり終了したりして、このポストを読んだ後、サムネイル、およびPOOF、それ以上の問題。ありがとう、+1。 – Korebian

0

xmlから次の行を削除してください。

android:background="#00ffffff" 

それは思ったほどばかげ:)

+0

私は私の問題を解決しました。とにかくあなたの答えに感謝します。 – TheFlash

1

将来的には:この醜いバグは、マシュマロで解決されたようです。私の仕事では、Xamarinを使って開発しています(基本的に、すべてのビューはプログラムで追加されています)。私たちにはテストデバイスがたくさんあります。私は主にマシュマロデバイスを使っていましたので、私が作業していたページを構築するときにこの黒いちらつきに気がつきませんでした。最後に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

代わりにJavaコードを使用するhttps://stackoverflow.com/a/27307286/38557からXMLベースのソリューションを適応。レイアウトを膨張させる前に、フラグメントの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ある場合は、単にスーパー実装を呼び出す前に、あなたの活動のonBackPressed()方法でINVISIBLEまたはGONEにごVideoView可視性を設定します。

ユーザーもボタンVideoViewを非表示にするには、インターセプトandroid.R.homeオプション項目「アップ」を通じて残すことができます。ここで

はKotlinに例を示します

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() 
}