We have an Android application running on Android API 4.0. One of the activities has a layout that divides the screen in 2 parts. On the left side we have a static part with some buttons. On the right side we have a FrameLayout that will switch to the corresponding fragment depending on the button that is pressed.
Problem: One of the fragments on the right side contains a VideoView. When the user clicks on the button to show this fragment the fragment is shown and the video immediately starts playing however: upon rendering this fragment the complete screen flickers in black which is very annoying.
Here is some code of the VideoFragment class:
public class VideoFragment extends Fragment { public VideoView videoView; private ExternalVideo mVideo; private boolean mVideoExists; private String mDestination; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDestination = ApplicationParams.MEDIA_STORAGE_PATH + "videos/" + FilenameUtils.getBaseName(((DetailActivity)getActivity()).getProduct().getVideoUrl()) + "." + FilenameUtils.getExtension(((DetailActivity) getActivity()).getProduct().getVideoUrl()); File file = new File(mDestination); mVideoExists = file.exists() && file.isFile(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view; if (mVideoExists) { getActivity().getWindow().setFormat(PixelFormat.TRANSLUCENT); view = inflater.inflate(R.layout.video, null); mVideo = new ExternalVideo(mDestination); videoView = (VideoView) view.findViewById(R.id.video_video); MediaController mediaController = new MediaController(getActivity()); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); videoView.setVideoPath(mVideo.getFullPath()); videoView.requestFocus(); videoView.setVisibility(View.VISIBLE); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { videoView.start(); } }); } else { TextView textView = new TextView(getActivity()); textView.setText(getActivity().getString(R.string.videofragment_video_coming_soon)); textView.setPadding(50, 50, 50, 50); view = textView; } return view; } }
Here is the layout of the video fragment:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <VideoView android:id="@+id/video_video" android:layout_width="fill_parent" android:layout_alignParentRight="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_height="fill_parent"/> </RelativeLayout>
Does anyone have an idea what could be causing this flickering issue upon rendering the fragment that contains the VideoView? A solution would be appreciated!
EDIT1: If I click on the fragment where the VideoView is on the screen flickers in the beginning. When I then navigate to anoter fragment and go back to the one containing the VideoView the flicker is gone.
I was able to fix this by adding a 0px by 0px SurfaceView in the layout of the parent activity of the fragment:
<SurfaceView android:layout_width="0px" android:layout_height="0px" />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With