博主要实现的效果是:一个视频作为背景(全屏、不可点击)循环播放,下方放一个按钮,点击按钮跳转到下一个界面。
刚开始使用的是VideoView,VideoView防止视频拉伸很麻烦,网上的帖子基本上都是自定义一个VideoView。之后搜到了用SurfaceView来实现视频播放的帖子,实现起来很简单,代码量也少。下面跟大家分享一下这个方法。
1.xml,将原先的VideoView替换成SurfaceView:
<SurfaceView
android:id="@+id/sv_start"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
/>
2.java代码:
private SurfaceView svStart;
private MediaPlayer player;
private SurfaceHolder holder;
svStart = findViewById(R.id.sv_start);
holder = svStart.getHolder();
holder.addCallback(this);
holder.setKeepScreenOn(true);
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
svStart.setLayoutParams(lp);
if (!player.isPlaying()) {
player.start();
}
}
});
try {
AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.start_movie);
player.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
file.getLength());
player.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
player.setLooping(true);
player.prepare();
} catch (IOException ioe) {
ioe.printStackTrace();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
player.setDisplay(holder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
protected void onDestroy() {
super.onDestroy();
if (player.isPlaying()) {
player.stop();
}
player.release();
}
关键代码就这一句:
player.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
有了这句代码,视频就不会出现拉伸变形了。
还有ondestroy里面的代码,如果不加上的话,activity挂掉之后仍然会有视频的声音。
使用过程中有什么问题给我留言,会尽快回复。
欢迎参观博主的其他博客。