Android VideoView 播放视频前先黑屏一下,获取视频第一帧解决黑屏
时间: 2023-08-09 08:09:11 浏览: 1274
在 Android 中,VideoView 播放视频时,会先显示黑屏,这是因为需要加载视频资源。如果想要在视频播放前显示一张图片,可以先获取视频的第一帧作为预览图,然后再将其设置为 VideoView 的背景。
获取视频第一帧可以使用 MediaMetadataRetriever 类,代码示例如下:
```java
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource("path/to/video");
Bitmap bitmap = retriever.getFrameAtTime();
```
获取到 bitmap 后,可以将其设置为 VideoView 的背景,代码示例如下:
```java
videoView.setBackground(new BitmapDrawable(getResources(), bitmap));
```
这样在视频加载前,就可以显示预览图了,避免了黑屏现象。
相关问题
Android VideoView 播放视频前先黑屏一下如何解决,完整代码
Android VideoView 在播放视频时,会先显示黑屏,这是因为在 VideoView 内部进行了初始化,会先把 SurfaceView 设置为透明色,然后再进行视频的播放。如果不想让用户看到黑屏,可以通过设置 VideoView 的背景色或者在 SurfaceView 上添加一个遮盖层来解决。
以下是一个示例代码:
布局文件 activity_main.xml:
```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_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black" />
<View
android:id="@+id/cover_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" />
</RelativeLayout>
```
Java 代码 MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
private VideoView videoView;
private View coverView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = findViewById(R.id.video_view);
coverView = findViewById(R.id.cover_view);
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video);
videoView.setVideoURI(uri);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
coverView.setVisibility(View.GONE);
videoView.start();
}
});
}
}
```
在这个示例中,我们在 VideoView 上设置了黑色的背景,然后在 VideoView 上方添加了一个白色的遮盖层。在视频准备好之后,我们隐藏了遮盖层,然后开始播放视频。这样就可以避免用户看到黑屏了。
Android VideoView 播放前先黑屏一下
Android VideoView 播放前先黑屏一下可能是由于视频准备过程中的缓冲导致的。你可以尝试在 VideoView 调用 start() 方法之前,先调用 setVisibility(View.INVISIBLE) 方法将其隐藏起来,等到视频准备好后再将其设置为可见。代码示例如下:
```
videoView.setVisibility(View.INVISIBLE);
videoView.setVideoURI(uri);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
videoView.setVisibility(View.VISIBLE);
videoView.start();
}
});
```
这样做的原理是先隐藏 VideoView,等到视频准备好后再将其显示出来,从而避免了视频准备期间的黑屏现象。
阅读全文