如果VideoView不可见,则不会调用VideoView onPrepared

Abh*_*k V 21 android video-streaming android-videoview

VideoView最初隐藏了,当视频加载时我正在显示VideoView.但是onPrepared,如果是从来没有所谓VideoViewinvisible最初阶段.但是onPrepared如果VideoView可见,则被正确调用.有没有办法隐藏videoView直到视频加载.任何帮助,将不胜感激.谢谢!

activity_main.xml中

<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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:visibility="invisible" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        VideoView videoView = (VideoView) findViewById(R.id.video);
        Uri videoUri = Uri.parse(url);
        videoView.setVideoURI(videoUri);
        videoView.requestFocus();

        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                Toast.makeText(mActivity, "on prepared", Toast.LENGTH_SHORT).show();


                 videoView.setVisibility(View.VISIBLE);


            }
        });


}
Run Code Online (Sandbox Code Playgroud)

FDI*_*DIM 9

您可以尝试将视频视图的Alpha通道设置为0或接近0.

  • 我使用FrameLayout作为视频视图的包装器,并在将Visibility设置为Visible之前将包装器Alpha设置为0,并在onPreparedListener中将视频视图包装器的alpha返回到1. View.setAlpha仅在API 11之后可用. (3认同)

小智 5

解决了使其布局不可见而不是 videoView 本身的问题。感谢@J.Kowalski。

布局:

<FrameLayout
    android:id="@+id/layout_video_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:scrollbars="none"/>
</FrameLayout>

<ProgressBar
    android:id="@+id/progress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:visibility="gone"
    />
Run Code Online (Sandbox Code Playgroud)

设置 OnPreparedListener:

videoView.setOnPreparedListener(this);
Run Code Online (Sandbox Code Playgroud)

准备好之前显示进度条:

@Override
public void showProgress() {
    progress.setVisibility(View.VISIBLE);
    layoutVideoView.setVisibility(View.INVISIBLE);
}
Run Code Online (Sandbox Code Playgroud)

加载视频 URI:

@Override
public void loadVideo(Uri uri) {
    videoView.setVideoURI(uri);
}
Run Code Online (Sandbox Code Playgroud)

准备就绪后,将调用 onPrepared:

@Override
public void onPrepared(MediaPlayer mp) {
    Log.d("debug", "onPrepared");
    iStepPreviewPresenter.onVideoViewReady();
}
Run Code Online (Sandbox Code Playgroud)

最后显示布局并开始视频:

@Override
public void hideProgress() {
    progress.setVisibility(View.INVISIBLE);
    layoutVideoView.setVisibility(View.VISIBLE);
}

@Override
public void startVideo() {
    videoView.start();
}
Run Code Online (Sandbox Code Playgroud)

搞定了!