Java Code Examples for android.view.View#getDefaultSize()

The following examples show how to use android.view.View#getDefaultSize() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RendererCommon.java    From webrtc_android with MIT License 6 votes vote down vote up
public Point measure(int widthSpec, int heightSpec, int frameWidth, int frameHeight) {
  // Calculate max allowed layout size.
  final int maxWidth = View.getDefaultSize(Integer.MAX_VALUE, widthSpec);
  final int maxHeight = View.getDefaultSize(Integer.MAX_VALUE, heightSpec);
  if (frameWidth == 0 || frameHeight == 0 || maxWidth == 0 || maxHeight == 0) {
    return new Point(maxWidth, maxHeight);
  }
  // Calculate desired display size based on scaling type, video aspect ratio,
  // and maximum layout size.
  final float frameAspect = frameWidth / (float) frameHeight;
  final float displayAspect = maxWidth / (float) maxHeight;
  final ScalingType scalingType = (frameAspect > 1.0f) == (displayAspect > 1.0f)
      ? scalingTypeMatchOrientation
      : scalingTypeMismatchOrientation;
  final Point layoutSize = getDisplaySize(scalingType, frameAspect, maxWidth, maxHeight);

  // If the measure specification is forcing a specific size - yield.
  if (View.MeasureSpec.getMode(widthSpec) == View.MeasureSpec.EXACTLY) {
    layoutSize.x = maxWidth;
  }
  if (View.MeasureSpec.getMode(heightSpec) == View.MeasureSpec.EXACTLY) {
    layoutSize.y = maxHeight;
  }
  return layoutSize;
}
 
Example 2
Source File: RendererCommon.java    From VideoCRE with MIT License 6 votes vote down vote up
public Point measure(int widthSpec, int heightSpec, int frameWidth, int frameHeight) {
  // Calculate max allowed layout size.
  final int maxWidth = View.getDefaultSize(Integer.MAX_VALUE, widthSpec);
  final int maxHeight = View.getDefaultSize(Integer.MAX_VALUE, heightSpec);
  if (frameWidth == 0 || frameHeight == 0 || maxWidth == 0 || maxHeight == 0) {
    return new Point(maxWidth, maxHeight);
  }
  // Calculate desired display size based on scaling type, video aspect ratio,
  // and maximum layout size.
  final float frameAspect = frameWidth / (float) frameHeight;
  final float displayAspect = maxWidth / (float) maxHeight;
  final ScalingType scalingType = (frameAspect > 1.0f) == (displayAspect > 1.0f)
      ? scalingTypeMatchOrientation
      : scalingTypeMismatchOrientation;
  final Point layoutSize = getDisplaySize(scalingType, frameAspect, maxWidth, maxHeight);

  // If the measure specification is forcing a specific size - yield.
  if (View.MeasureSpec.getMode(widthSpec) == View.MeasureSpec.EXACTLY) {
    layoutSize.x = maxWidth;
  }
  if (View.MeasureSpec.getMode(heightSpec) == View.MeasureSpec.EXACTLY) {
    layoutSize.y = maxHeight;
  }
  return layoutSize;
}
 
Example 3
Source File: MeasureHelper.java    From QSVideoPlayer with Apache License 2.0 4 votes vote down vote up
/**
 * 根据模式计算视频显示的大小
 */
public void doMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (mVideoRotationDegree == 90 || mVideoRotationDegree == 270) {
        int tempSpec = widthMeasureSpec;
        widthMeasureSpec = heightMeasureSpec;
        heightMeasureSpec = tempSpec;
    }

    int width = View.getDefaultSize(mVideoWidth, widthMeasureSpec);
    int height = View.getDefaultSize(mVideoHeight, heightMeasureSpec);
    if (mCurrentAspectRatio == IRenderView.AR_MATCH_PARENT) {
        width = widthMeasureSpec;
        height = heightMeasureSpec;
    } else if (mVideoWidth > 0 && mVideoHeight > 0) {
        int widthSpecSize = width;
        int heightSpecSize = height;

        //Log.i("viewsize", "容器控件大小 = " + widthSpecSize + "," + heightSpecSize);

        float displayAspectRatio;//计算不同模式的视频比例
        switch (mCurrentAspectRatio) {
            case IRenderView.AR_16_9_FIT_PARENT:
                displayAspectRatio = 16.0f / 9.0f;
                if (mVideoRotationDegree == 90 || mVideoRotationDegree == 270)
                    displayAspectRatio = 1.0f / displayAspectRatio;
                break;
            case IRenderView.AR_4_3_FIT_PARENT:
                displayAspectRatio = 4.0f / 3.0f;
                if (mVideoRotationDegree == 90 || mVideoRotationDegree == 270)
                    displayAspectRatio = 1.0f / displayAspectRatio;
                break;
            case IRenderView.AR_ASPECT_FIT_PARENT:
            case IRenderView.AR_ASPECT_FILL_PARENT:
            case IRenderView.AR_ASPECT_WRAP_CONTENT:
            default:
                displayAspectRatio = (float) mVideoWidth / (float) mVideoHeight;
                if (mVideoSarNum > 0 && mVideoSarDen > 0)
                    displayAspectRatio = displayAspectRatio * mVideoSarNum / mVideoSarDen;
                break;
        }
        //容器view比例
        float specAspectRatio = (float) widthSpecSize / (float) heightSpecSize;
        //容器比例和视频比例大小 (确定是哪一边抵触边缘用,true表示视频比容器胖 false表示表示比较瘦
        boolean shouldBeWider = displayAspectRatio > specAspectRatio;
        //计算出宽高
        switch (mCurrentAspectRatio) {
            case IRenderView.AR_ASPECT_FILL_PARENT:
                if (shouldBeWider) {
                    // not high enough, fix height
                    height = heightSpecSize;
                    width = (int) (height * displayAspectRatio);
                } else {
                    // not wide enough, fix width
                    width = widthSpecSize;
                    height = (int) (width / displayAspectRatio);
                }
                break;
            case IRenderView.AR_ASPECT_WRAP_CONTENT:
                if (shouldBeWider) {
                    // too wide, fix width
                    width = Math.min(mVideoWidth, widthSpecSize);
                    height = (int) (width / displayAspectRatio);
                } else {
                    // too high, fix height
                    height = Math.min(mVideoHeight, heightSpecSize);
                    width = (int) (height * displayAspectRatio);
                }

                break;
            case IRenderView.AR_ASPECT_FIT_PARENT:
            case IRenderView.AR_16_9_FIT_PARENT:
            case IRenderView.AR_4_3_FIT_PARENT:
            default:
                if (shouldBeWider) {
                    // too wide, fix width
                    width = widthSpecSize;
                    height = (int) (width / displayAspectRatio);
                } else {
                    // too high, fix height
                    height = heightSpecSize;
                    width = (int) (height * displayAspectRatio);
                }
                break;


        }
    }

    mMeasuredWidth = width;
    mMeasuredHeight = height;
    //Log.i("viewsize", "视频大小 = " + mVideoWidth + "," + mVideoHeight
    //        + "\n改变后view大小 = " + width + "," + height);

}