在高德地图的基础上使用VideoView播放视频的时候,可以看到视频画面闪了一下之后就消失了。但声音还是在的,就是没有画面。效果如下。
界面布局很简单,就一个map和一个VideoView。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<VideoView
android:layout_below="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
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.setZOrderMediaOverlay(true);
重新运行效果如下,VideoView没有被覆盖,完美展示。