TextureView的onSurfaceTextureDestroyed方法在点击下一个界面不回调问题

被这个问题纠缠了几天,Google很久都没有找到答案,这个方法在点击下一个界面始终不调用destroy倒置绘制的东西会出问题,最后发现原因为在这个界面的主题上面添加了<item name="android:windowIsTranslucent">true</item>这个属性。去掉这行fuck code就可以了

TextureViewsurfaceTextureAvailable 回调方法中,我们可以获取到一个 SurfaceTexture 对象,该对象可以将视频帧渲染到 TextureView 上。我们可以在这个回调方法中创建 MediaPlayer 对象,并将其与 SurfaceTexture 对象相关联,以便进行视频播放。 以下是一个示例代码,演示了如何在 TextureViewsurfaceTextureAvailable 回调方法中创建 MediaPlayer 对象并启动视频播放: ```java @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { // 创建 MediaPlayer 对象 MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setSurface(new Surface(surface)); try { // 设置要播放的视频文件路径 mediaPlayer.setDataSource("path/to/video/file"); mediaPlayer.prepareAsync(); // 异步准备 MediaPlayer mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 准备完成后开始播放视频 mediaPlayer.start(); } }); } catch (IOException e) { e.printStackTrace(); } } ``` 在这个示例代码中,我们首先创建了一个 MediaPlayer 对象,并通过 mediaPlayer.setSurface() 方法将其与 Surface 对象相关联。接着,我们设置了要播放的视频文件路径,并通过 mediaPlayer.prepareAsync() 方法异步准备 MediaPlayer 对象。在 MediaPlayer 准备完成后,我们通过 mediaPlayer.start() 方法开始播放视频。 需要注意的是,在 TextureView 销毁时,我们应该及时释放 MediaPlayer 对象,以避免内存泄漏。可以在 TextureViewsurfaceTextureDestroyed 回调方法中释放 MediaPlayer 对象,如下所示: ```java @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { mediaPlayer.release(); // 释放 MediaPlayer 对象 return true; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值