2015-06-03 2 views
1

Я сделал пользовательскую камеру на Android с помощью камеры2 api. В настоящее время я сталкиваюсь с проблемой прерывания работы с одним устройством OnePlus One. Как проверено, он отлично работает с другими устройствами, такими как S3, S4, HTC (все основные устройства), Moto (все устройства).Передний просмотр камеры не полный экран

Просьба указать, требуется ли что-либо в этом случае для устранения этой проблемы на OnePlus One и других устройствах?

public class AutoFitTextureView extends TextureView { 

private int mRatioWidth = 0; 
private int mRatioHeight = 0; 

public AutoFitTextureView(Context context) { 
    this(context, null); 
} 

public AutoFitTextureView(Context context, AttributeSet attrs) { 
    this(context, attrs, 0); 
} 

@SuppressLint("NewApi") 
public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

/** 
* Sets the aspect ratio for this view. The size of the view will be measured based on the ratio 
* calculated from the parameters. Note that the actual sizes of parameters don't matter, that 
* is, calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result. 
* 
* @param width Relative horizontal size 
* @param height Relative vertical size 
*/ 
@SuppressLint("NewApi") 
public void setAspectRatio(int width, int height) { 
    if (width < 0 || height < 0) { 
     throw new IllegalArgumentException("Size cannot be negative."); 
    } 
    mRatioWidth = width; 
    mRatioHeight = height; 
    requestLayout(); 
} 

@SuppressLint("NewApi") 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    if (mRatioWidth ==0 && mRatioHeight == 00) { 
      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); 
       } 
      } 
    }else { 
     setMeasuredDimension(mRatioWidth, mRatioHeight); 
    } 
} 

Мы использовали this ссылку, чтобы эта камера

Заранее спасибо

ответ

-1

Похоже, что секции кода

if (mRatioWidth ==0 && mRatioHeight == 00) { 
      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); 
       } 
      } 
    }else { 
     setMeasuredDimension(mRatioWidth, mRatioHeight); 
    } 

равна

if (mRatioWidth ==0 && mRatioHeight == 00) { 

    int width = MeasureSpec.getSize(widthMeasureSpec); 
    int height = MeasureSpec.getSize(heightMeasureSpec); 
    setMeasuredDimension(width, height);     

}else { 

    setMeasuredDimension(mRatioWidth, mRatioHeight); 
    } 

Это логика, которую вы хотите?

+0

Hi Zephyr, Спасибо за ответ. Это решение не работает для меня. основной проблемой является предварительный просмотр камеры, а не полный экран только на One plus one mobile. – Sirconrad

+0

@Sirconrad, я просто предполагаю, что в вашей функции onMeasure() или onLayout() возможно что-то пропущено, поэтому, пожалуйста, проверьте логику в коде. – Zephyr

+0

@Sirconrad, что касается телефона One plus, возможно, вам нужно установить другое приложение-образец, чтобы проверить, есть ли какие-то специальные трюки, чтобы получить полный экран на этом телефоне. Или используя инструмент для проверки информации о экране/дисплее для этого телефона. – Zephyr

5

Вы должны изменить измеренную ширину и высоту, чтобы покрыть весь экран, а не соответствовать экрану, как показано ниже.

От:

if (width < height * mRatioWidth/mRatioHeight) 

в

if (width > height * mRatioWidth/mRatioHeight) 

Он работал нормально для меня. Get full screen preview with Android camera2

+0

Это сработало для меня. – carlsz

Смежные вопросы