高德地图与VideoView冲突

在高德地图的基础上使用VideoView播放视频的时候,可以看到视频画面闪了一下之后就消失了。但声音还是在的,就是没有画面。效果如下。

高德地图与VideoView冲突
文章图片

界面布局很简单,就一个map和一个VideoView。


Activity中代码:

public class MainActivity extends Activity { private MapView mMapView; private AMap aMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mMapView.getMap(); } //移动中心点到西安 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(34.341568, 108.940174), 10)); VideoView videoView = (VideoView) findViewById(R.id.vv_videoview); //设置路径 videoView.setVideoPath("/storage/emulated/0/video.mp4"); //设置视频控制器 videoView.setMediaController(new MediaController(this)); //播放完成回调 videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Toast.makeText(getApplicationContext(),"end",Toast.LENGTH_SHORT).show(); } }); //开始播放视频 videoView.start(); }@Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); }@Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mMapView.onResume(); }@Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mMapView.onPause(); }@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState), //保存地图当前的状态 mMapView.onSaveInstanceState(outState); }}

出现这种效果的原因是由于视频播放的SurfaceView与MapView的GLSurfaceView冲突,发生了重叠现象。解决办法:VideoView是继承于SurfaceView的,SurfaceView中有个方法是将当前view一直置于最上边,不被其他view覆盖。所以只需要给VideoView设置setZOrderMediaOverlay(true)即可。 官方Api介绍如下:

【高德地图与VideoView冲突】高德地图与VideoView冲突
文章图片

添加代码。
videoView.setZOrderMediaOverlay(true);

重新运行效果如下,VideoView没有被覆盖,完美展示。


    推荐阅读