關於SurfaceView橫豎屏切換顯示問題

我們一般都會用SurfaceView做預覽和播放,話不多說,直接上代碼清單文件中設置好代碼中實現onConfigurationChanged()方法

android:configChanges="orientation|screenSize

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
//豎屏顯示

        LayoutParams lp = mSurface.getLayoutParams();
        lp.width = lp.MATCH_PARENT;
        lp.height = 680;
        mSurface.setLayoutParams(lp);


    } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

//橫屏顯示
        LayoutParams lp = mSurface.getLayoutParams();
        lp.width = lp.MATCH_PARENT;
        lp.height =lp.MATCH_PARENT;
        mSurface.setLayoutParams(lp);

    }

通過判斷橫豎屏來設置surfaceView的寬高就可以了,有的需求是橫豎屏切換後要保持一定的比例,請看下面

DisplayMetrics dm = new DisplayMetrics();
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);

    int screenWidth = dm.widthPixels;

    int screenHeigh = dm.heightPixels;
    LayoutParams lp = mSurface.getLayoutParams();
    lp.width = screenWidth;
    lp.height = screenWidth * 9/16;

    mSurface.setLayoutParams(lp);

} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);

    int screenWidth = dm.widthPixels;

    int screenHeigh = dm.heightPixels;
    LayoutParams lp = mSurface.getLayoutParams();
    lp.width = screenHeigh*16/9;
    lp.height =screenHeigh;
    mSurface.setLayoutParams(lp);
}

獲取手機系統的寬高,你想要什麼比例就按比例計算就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章