1. 程式人生 > >VideoView全屏播放視訊出現拉伸變形解決

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掛掉之後仍然會有視訊的聲音。

使用過程中有什麼問題給我留言,會盡快回復。

歡迎參觀博主的其他部落格。

博主上傳資源下載連結:

本文原始碼:

環狀百分比顯示檢視原始碼:

自制免費無廣告小說閱讀APP下載:

科大訊飛語音評測服務接入原始碼:

android餃子播放器使用原始碼:

視訊播放前顯示視訊第一幀原始碼: