使用camera2設置全屏TextureView卻不顯示爲全屏的解決辦法

找到自己TextureView的onMeasure()方法,如果使用的是官方demo,那代碼應該如下:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    if (0 == mRatioWidth || 0 == mRatioHeight) {
        setMeasuredDimension(width, height);
    } else {
        if (width < height * mRatioWidth / mRatioHeight) {
            setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
        } else {
            setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
        }
    }
}

這段代碼使得TextureView在寬高都不超過手機屏幕的情況下最大化顯示。
解決方案是,讓TextureView總是達到最大邊界,超出部分不進行預覽(實際上還是能拍到的)。代碼如下:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    if (0 == mRatioWidth || 0 == mRatioHeight) {
        setMeasuredDimension(width, height);
    } else {
    	//注意這裏騷操作,替換"小於號"爲"大於號"
        if (width > height * mRatioWidth / mRatioHeight) {    
            setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
        } else {
            setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
        }
    }
}

實際上就是把判斷條件中的 “<” 替換成 “>” 即可,天知道這一小段代碼害慘多少程序員。

上個效果圖:
在這裏插入圖片描述

發佈了213 篇原創文章 · 獲贊 861 · 訪問量 125萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章