首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果VideoView不可见,则不调用VideoView onPrepared

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

Stack Overflow用户
提问于 2014-01-24 20:47:30
回答 3查看 12.4K关注 0票数 27

我最初隐藏了VideoView,当视频加载时,我显示了VideoView。但是,如果VideoView最初为invisible,则永远不会调用onPrepared。但是,如果VideoView可见,则可以正确调用onPrepared。有没有办法在加载视频之前隐藏videoView。任何帮助都将不胜感激。谢谢!

activity_main.xml

代码语言:javascript
复制
<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>

MainActivity.java

代码语言:javascript
复制
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);


            }
        });


}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-12 22:58:28

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

票数 11
EN

Stack Overflow用户

发布于 2015-07-30 21:16:02

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

布局:

代码语言:javascript
复制
<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"
    />

设置OnPreparedListener:

代码语言:javascript
复制
videoView.setOnPreparedListener(this);

在就绪前显示进度条:

代码语言:javascript
复制
@Override
public void showProgress() {
    progress.setVisibility(View.VISIBLE);
    layoutVideoView.setVisibility(View.INVISIBLE);
}

加载视频URI:

代码语言:javascript
复制
@Override
public void loadVideo(Uri uri) {
    videoView.setVideoURI(uri);
}

准备就绪后,将调用onPrepared:

代码语言:javascript
复制
@Override
public void onPrepared(MediaPlayer mp) {
    Log.d("debug", "onPrepared");
    iStepPreviewPresenter.onVideoViewReady();
}

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

代码语言:javascript
复制
@Override
public void hideProgress() {
    progress.setVisibility(View.INVISIBLE);
    layoutVideoView.setVisibility(View.VISIBLE);
}

@Override
public void startVideo() {
    videoView.start();
}

成功了!

票数 4
EN

Stack Overflow用户

发布于 2018-05-26 21:15:52

一种更简单的解决方法:

只需为videoview添加一个虚拟parentview,并为该parentview设置visiblity,而不是更改videoview本身的visibility

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21333141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档