我有一个显示位图(占位符图像)的 TextureView,当用户加载视频时,textureView 应该显示视频。
我设法在纹理视图中播放视频并在纹理视图中显示位图,但是当按顺序完成时,我只是得到一个黑屏。
在我的 onSurfaceTextureAvailable 方法中,我在表面视图上绘制位图,如下所示:
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_add_clip);
Canvas canvas = lockCanvas();
canvas.drawBitmap(bm, (width/2)-(bm.getWidth()/2), (height/2)-(bm.getHeight()/2), null);
unlockCanvasAndPost(canvas);
}
当用户从其图库中选择视频时,我将 Uri 加载到媒体播放器中并将表面设置为媒体播放器。但仍显示位图。我试图通过清除画布来删除位图,它确实删除了位图,但纹理视图只是黑色,也不会显示视频。
public void setMediaPlayer(MediaPlayer mediaPlayer) {
// Canvas canvas = lockCanvas();
// canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// unlockCanvasAndPost(canvas);
Surface s = new Surface(getSurfaceTexture());
mMediaPlayer = mediaPlayer;
mMediaPlayer.setSurface(s);
mMediaPlayer.setOnPreparedListener(this);
}
有些东西告诉我,我用来显示视频的表面视图位于我在 TextureAvailble 上绘制的位图后面。当我尝试清除画布时,我也会清除媒体播放器想要使用的表面。有什么解决办法吗?