VideoView全屏播放視訊出現拉伸變形解決
阿新 • • 發佈:2019-01-22
博主要實現的效果是:一個視訊作為背景(全屏、不可點選)迴圈播放,下方放一個按鈕,點選按鈕跳轉到下一個介面。
剛開始使用的是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餃子播放器使用原始碼:
視訊播放前顯示視訊第一幀原始碼: