android.view.View#getDefaultSize ( )源码实例Demo

下面列出了android.view.View#getDefaultSize ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: webrtc_android   文件: RendererCommon.java
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;
}
 
源代码2 项目: VideoCRE   文件: RendererCommon.java
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;
}
 
源代码3 项目: QSVideoPlayer   文件: MeasureHelper.java
/**
 * 根据模式计算视频显示的大小
 */
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);

}
 
 方法所在类
 同类方法