大佬教程收集整理的这篇文章主要介绍了Android:MediaPlayer视频宽高比问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
private class ErrorListener implements OnErrorListener { // FIXME: @Override public Boolean onError(MediaPlayer mp,int what,int extra) { String message = "UnkNown error"; switch (what) { case MediaPlayer.MEDIA_ERROR_UNKNowN: message = "Unable to play media"; showError(messagE); break; case MediaPlayer.MEDIA_ERROR_SERVER_DIED: message = "Server Failed"; showError(messagE); break; case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK: message = "Invalid media"; showError(messagE); break; } return false; } } public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.videoview); Intent intent = geTintent(); uri = intent.getData(); new loadMovie().execute(); mPreview = (SurfaceView) findViewById(R.id.videoview); mPreview.bringToFront(); holder = mPreview.getHolder(); holder.addCallBACk(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mediaPlayer = new MediaPlayer(); }// onCreate Method Ends private void playVideo() { doCleanUp(); try { mediaPlayer.setDatasource(this,uri); } catch (IllegalArgumentexception E) { e.printStackTrace(); } catch (SecurityException E) { e.printStackTrace(); } catch (IllegalStateException E) { e.printStackTrace(); } catch (IOException E) { e.printStackTrace(); } mediaPlayer.setDisplay(holder); try { mediaPlayer.prepare(); } catch (IllegalStateException E) { e.printStackTrace(); } catch (IOException E) { e.printStackTrace(); } mediaPlayer.setOnErrorListener(new ErrorListener()); mediaPlayer.setOnBufferingupdateListener(this); mediaPlayer.setOnCompletionListener(this); mediaPlayer.setOnPreparedListener(this); mediaPlayer.setOnVideoSizeChangedListener(this); mediaPlayer.setAudioStreamType(Au@L_569_13@manager.STREAM_MUSIC); mediaController = new MediaController(this); } @Override public Boolean onTouchEvent(MotionEvent event) { mediaController.show(); return false; } // --MediaPlayerControl // methods---------------------------------------------------- public void start() { mediaPlayer.start(); } public void pause() { mediaPlayer.pause(); } public int getDuration() { return mediaPlayer.getDuration(); } public int getCurrentPosition() { return mediaPlayer.getCurrentPosition(); } public void seekTo(int i) { mediaPlayer.seekTo(i); } public Boolean isPlaying() { return mediaPlayer.isPlaying(); } public int getBufferPercentage() { return 0; } public Boolean canPause() { return true; } public Boolean canSeekBACkWARD() { return true; } public Boolean canSeekForWARD() { return true; } // End of MediaPlayer // Controls-------------------------------------------------------- // ------------------------ public void onPrepared(MediaPlayer mediaPlayer) { mediaController.setMediaPlayer(this); mediaController.setAnchorView(findViewById(R.id.videoview)); mIsVideoReadyToBePlayed = true; if (mIsVideoReadyToBePlayed && mIsVideoSizeKNown) { startVideoPlayBACk(); } handler.post(new Runnable() { public void run() { mediaController.setEnabled(true); mediaController.show(); } }); } public void surfaceChanged(SurfaceHolder arg0,int arg1,int arg2,int arg3) { // TODO Auto-generated method stub } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub playVideo(); } public void surfaceDestroyed(SurfaceHolder arg0) { } private void startVideoPlayBACk() { holder.setFixedSize(mVideoWidth,mVideoHeight); mediaPlayer.start(); } public void onVideoSizeChanged(MediaPlayer mp,int width,int height) { if (width == 0 || height == 0) { return; } mIsVideoSizeKNown = true; mVideoWidth = width; mVideoHeight = height; if (mIsVideoReadyToBePlayed && mIsVideoSizeKNown) { startVideoPlayBACk(); } } public void onCompletion(MediaPlayer arg0) { } public void onBufferingupdate(MediaPlayer mp,int percent) { } private void releaseMediaPlayer() { mediaPlayer.release(); mediaPlayer = null; } private void doCleanUp() { mVideoWidth = 0; mVideoHeight = 0; mIsVideoReadyToBePlayed = false; mIsVideoSizeKNown = false; }
这是XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://scheR_516_11845@as.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <SurfaceView android:id="@+id/videoview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
任何人都可以告诉我如何保持视频的宽高比?
在SurfaceView中,创建一个监听器:
@H_514_2@mMediaPlayer = new MediaPlayer(); @H_542_4@mMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);…
@H_514_2@mediaPlayer.onVideoSizeChangedListener mOnVideoSizeChangedListener = new MediaPlayer.onVideoSizeChangedListener() { @Override public void onVideoSizeChanged(MediaPlayer mp,int height) { setFitToFillAspectRatio(mp,width,height); } };…
最后适合SurfaceView中的填充方法.这将适用于风景和肖像
private void setFitToFillAspectRatio(MediaPlayer mp,int videoWidth,int videoHeight) { if(mp != null) { Integer screenWidth = ((Activity) mContext).getWindowManager().getDefaultDisplay().getWidth(); Integer screenHeight = ((Activity) mContext).getWindowManager().getDefaultDisplay().getHeight(); android.view.ViewGroup.LayoutParams videoParams = getLayoutParams(); if (videoWidth > videoHeight) { videoParams.width = screenWidth; videoParams.height = screenWidth * videoHeight / videoWidth; } else { videoParams.width = screenHeight * videoWidth / videoHeight; videoParams.height = screenHeight; } setLayoutParams(videoParams); } }
以上是大佬教程为你收集整理的Android:MediaPlayer视频宽高比问题全部内容,希望文章能够帮你解决Android:MediaPlayer视频宽高比问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。