gpt4 book ai didi

android - 媒体播放器完成后如何清除表面支架?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:04 26 4
gpt4 key购买 nike

我用 surfaceview 和 mediaplayer 制作了一个视频播放器。我有 10 个视频和 10 个按钮。如果点击每个按钮,每个视频都在播放。

这是我的代码..

//onCreate   
holder = surfaceview.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


//Button1
if(mp == null)mp = new MediaPlayer();

mp.setDataSource(mediaplay_path);
mp.setDisplay(holder);
mp.setScreenOnWhilePlaying(true);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepare();
mp.start();


//Button2
if(mp != null){
mp.stop();
mp.reset();
}

mp.setDataSource(mediaplay_path2);
mp.setDisplay(holder);
mp.setScreenOnWhilePlaying(true);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.prepare();
mp.start();

//Button3~Button10 is same as Button2..

一切都很好。我的自定义 videoview 工作正常。但是当视频转到下一个视频时,上一个视频的最后一个场景会保留一段时间,然后转到下一个视频场景。

我认为这是因为在播放下一个视频之前,之前的 surfaceview 应该是清晰的。但我不知道如何清除表面 View 或表面支架。

我已经搜索过这个但只能找到如何播放视频,而不是如何清除从媒体播放器设置的表面 View 。

请帮帮我~~!

最佳答案

我花了两周时间才弄明白这一点。通过将 surfaceholder 设置为 TRANSPARENT,Android 将破坏表面。然后将其设置回不透明创建一个新的表面“清除”表面。请注意 surfacecreate 和 surfacedestroy 事件将触发,因此如果您有代码,请当心。我把一个 imageview 设置为黑色以给它一个黑色背景。也许有更好的方法。

private void playVideoA() { 
imageViewBlack.bringToFront();
surfaceHolder.setFormat(PixelFormat.TRANSPARENT);
surfaceHolder.setFormat(PixelFormat.OPAQUE);
surfaceView.bringToFront();
mediaPlayerA.setDisplay(surfaceHolder);
//surfaceView.setAlpha((float) 0.01);
mediaPlayerA.start();
};
private void prepareVideoA(String url) {
try {
mediaPlayerA = new MediaPlayer();
mediaPlayerA.setDataSource(url);
mediaPlayerA.prepareAsync();
mediaPlayerA.setOnPreparedListener(this);
mediaPlayerA.setOnCompletionListener(this);
mediaPlayerA.setOnBufferingUpdateListener(this);
mediaPlayerA.setOnInfoListener(this);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
@Override
public void onPrepared(MediaPlayer mp) {
playVideoA()
}

关于android - 媒体播放器完成后如何清除表面支架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com