这可以很好地达到玩家停止缓冲的程度,我尝试从屏幕上删除进度条。进度条停止动画,但它仍保留在屏幕上,就好像它是视频上的水印一样。 我尝试删除它的方法是更改进度条的可见性;我已经尝试了View.INVISIBLE和View.GONE,但都不起作用。 我还尝试将进度条包装在另一个布局中并更改该容器的可见性,但无济于事。
我注意到当我旋转设备时,进度条消失了。
以下是播放器活动的xml布局。其中的surfaceview仅用于设备不支持OpenGL 2.0的情况。
有没有人知道如何摆脱这个ProgressBar?
提前致谢!
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:id="@+id/gl_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" >
</FrameLayout>
<SurfaceView
android:id="@+id/surface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true" >
</SurfaceView>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/controlContainer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#aa000000"
android:orientation="vertical"
android:padding="10dp" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
<ToggleButton
android:id="@+id/buttonPausePlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector_play_pause"
android:textOff=""
android:textOn="" />
<ImageButton
android:id="@+id/buttonStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:src="@drawable/ic_media_stop" />
</LinearLayout>
<ProgressBar
android:id="@+id/seekbar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:enabled="false"
android:indeterminate="false" />
</LinearLayout>
<LinearLayout
android:id="@+id/loadingContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/loading"
style="@android:style/Widget.ProgressBar.Large.Inverse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true" />
</LinearLayout>
</RelativeLayout>
编辑:更改视图可见性的代码:
@Override
public void onBuffering(int progress_in_percent) {
Log.d(TAG, "Buffering " + progress_in_percent + " %");
}
@Override
public void onBufferingBegin() {
Log.d(TAG, "Buffering begin");
loadingContainer.setVisibility(View.VISIBLE);
}
@Override
public void onBufferingEnd() {
Log.d(TAG, "Buffering end");
loadingContainer.setVisibility(View.GONE);
}
从NexPlayer框架内调用这些方法。我确信它们会被调用,因为我在日志中得到了输出。
答案 0 :(得分:2)
是的,我明白了。我从NexPlayer框架获得的回调不在UI线程上。奇怪的是,这并没有导致日志中的任何堆栈跟踪,所以我没有注意到这一点,直到我附加我的调试器并添加了一个暂停任何异常的断点。
我通过创建与上面的代码完全相同的runnables并将它们发布到我的处理程序来解决这个问题。
(它仍然打败了我为什么ProgressBar首先出现,因为它也在错误的线程上显示:/)