zoukankan      html  css  js  c++  java
  • Android SurfaceView播放视频时横竖屏的调整

    对于横屏录制的视频就横屏播放,对于竖屏录制的视频就竖屏播放。

    在mainifest文件里对负责播放的Activity添加以下属性

        android:configChanges="orientation|keyboardHidden|screenSize"

     重写Acitivity的onConfigurationChanged方法:

        @Override
            public void onConfigurationChanged(Configuration newConfig) {
                super.onConfigurationChanged(newConfig);
    
            }

    根据视频的属性来区分

        @Override
            public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                if (width == 0 || height == 0) {
                    Log.e(TAG, "invalid video width(" + width + ") or height(" + height
                            + ")");
                    return;
                }
                Logger.d(TAG, "onVideoSizeChanged " + width + " height:" + height);
                mIsVideoSizeKnown = true;
                mVideoHeight = height;
                mVideoWidth = width;
                int wid = mMediaPlayer.getVideoWidth();
                int hig = mMediaPlayer.getVideoHeight();
                // 根据视频的属性调整其显示的模式
    
                if (wid > hig) {
                    if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                    }
                } else {
                    if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    }
                }
                DisplayMetrics dm = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(dm);
                mSurfaceViewWidth = dm.widthPixels;
                mSurfaceViewHeight = dm.heightPixels;
                if (width > height) {
                    // 竖屏录制的视频,调节其上下的空余
    
                    int w = mSurfaceViewHeight * width / height;
                    int margin = (mSurfaceViewWidth - w) / 2;
                    Logger.d(TAG, "margin:" + margin);
                    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                            RelativeLayout.LayoutParams.MATCH_PARENT,
                            RelativeLayout.LayoutParams.MATCH_PARENT);
                    lp.setMargins(margin, 0, margin, 0);
                    mSurfaceView.setLayoutParams(lp);
                } else {
                    // 横屏录制的视频,调节其左右的空余
    
                    int h = mSurfaceViewWidth * height / width;
                    int margin = (mSurfaceViewHeight - h) / 2;
                    Logger.d(TAG, "margin:" + margin);
                    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                            RelativeLayout.LayoutParams.MATCH_PARENT,
                            RelativeLayout.LayoutParams.MATCH_PARENT);
                    lp.setMargins(0, margin, 0, margin);
                    mSurfaceView.setLayoutParams(lp);
                }
            }
  • 相关阅读:
    Axis,axis2,Xfire以及cxf对比 (转)
    客户端调用服务器端三种方式
    webservice发送数据,取数据的方式
    强制关闭myeclipse出现的问题
    取当前系统的上月时间
    oracle 报Ora-01008错误:oracle 并非所有变量都已绑定的原因.TO_number();动态执行select..into..语句时
    ResultSetMetaData rsmd = rs.getMetaData()是什么意思?
    概率质量函数:怀孕周期的PMF
    Python 正则表达式
    TF-IDF
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4218244.html
Copyright © 2011-2022 走看看