Question

My layout.xml consists of a FrameLayout with a few TextViews and Buttons, that I use like a MediaController, and it also contains a SurfaceView. In the code I create a MediaPlayer and sets the SurfaceView's SurfaceHolder as the Display like this :

surfaceView = (SurfaceView) findViewById(R.id.video_surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
mediaPlayer.setDisplay(surfaceHolder);

This works great for displaying video but when I try to call the :

overLayTextView.setVisibility(View.Gone);

The overLayTextView is still visible. Ive tried to retrieve the view state of the overLayTextView and it is set to Gone. I think the SurfaceView doesn't update its drawing state until when it feels like (usually happens after 20+ seconds). So my question is if there is anything I can call on the SurfaceView or SurfaceHolder to notify them that they should "redraw" some of their content? (obviously not the video).

Was it helpful?

Solution

I just realized the thread updating the overlays with video info still called :

overLayTextView.setText(mediaPlayer.getDuration());

In "none-surface" layouts this doesn't matter since the View is hidden but in SurfaceView this is apparantly not the case (at least on some devices, strangely enough).

Hope this helps, cheers.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top