VideoView全屏播放视频出现拉伸变形解决

博主要实现的效果是:一个视频作为背景(全屏、不可点击)循环播放,下方放一个按钮,点击按钮跳转到下一个界面。

刚开始使用的是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挂掉之后仍然会有视频的声音。


使用过程中有什么问题给我留言,会尽快回复。

欢迎参观博主的其他博客。

猜你喜欢

转载自blog.csdn.net/yonghuming_jesse/article/details/80569008