@Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    int size;
    if (widthMode == MeasureSpec.EXACTLY && widthSize > 0) {
      size = widthSize;
    } else if (heightMode == MeasureSpec.EXACTLY && heightSize > 0) {
      size = heightSize;
    } else {
      size = widthSize < heightSize ? widthSize : heightSize;
    }

    int finalMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
    mSize = size;

    if (mShowTags) {
      showTags();
    }
    Log.i("[VTC]", "tag container size " + mSize);
    super.onMeasure(finalMeasureSpec, finalMeasureSpec);
  }
Ejemplo n.º 2
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int width;
    int height;

    // Get measureSpec mode and size values.
    final int measureWidthMode = MeasureSpec.getMode(widthMeasureSpec);
    final int measureHeightMode = MeasureSpec.getMode(heightMeasureSpec);
    final int measureWidth = MeasureSpec.getSize(widthMeasureSpec);
    final int measureHeight = MeasureSpec.getSize(heightMeasureSpec);

    // The RangeBar width should be as large as possible.
    if (measureWidthMode == MeasureSpec.AT_MOST) {
      width = measureWidth;
    } else if (measureWidthMode == MeasureSpec.EXACTLY) {
      width = measureWidth;
    } else {
      width = mDefaultWidth;
    }

    // The RangeBar height should be as small as possible.
    if (measureHeightMode == MeasureSpec.AT_MOST) {
      height = Math.min(mDefaultHeight, measureHeight);
    } else if (measureHeightMode == MeasureSpec.EXACTLY) {
      height = measureHeight;
    } else {
      height = mDefaultHeight;
    }

    setMeasuredDimension(width, height);
  }
Ejemplo n.º 3
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);

    int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);

    if (widthSpecMode == MeasureSpec.UNSPECIFIED || heightSpecMode == MeasureSpec.UNSPECIFIED) {
      throw new RuntimeException("CellLayout cannot have UNSPECIFIED dimensions");
    }

    final int count = getChildCount();
    for (int i = 0; i < count; i++) {
      View child = getChildAt(i);
      PagedViewCellLayout.LayoutParams lp =
          (PagedViewCellLayout.LayoutParams) child.getLayoutParams();
      lp.setup(mCellWidth, mCellHeight, mWidthGap, mHeightGap, getPaddingLeft(), getPaddingTop());

      int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
      int childheightMeasureSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);

      child.measure(childWidthMeasureSpec, childheightMeasureSpec);
    }

    setMeasuredDimension(widthSpecSize, heightSpecSize);
  }
Ejemplo n.º 4
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    final int heightMode = MeasureSpec.getMode(heightMeasureSpec);

    if (widthMode != MeasureSpec.EXACTLY || heightMode != MeasureSpec.EXACTLY) {
      throw new IllegalStateException("Must measure with an exact size");
    }

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

    if (!mMenuSizeSet) mMenuSize = (int) (height * 0.25f);
    if (mOffsetPixels == -1) openMenu(false);

    final int menuWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 0, width);
    final int menuHeightMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 0, mMenuSize);
    mMenuContainer.measure(menuWidthMeasureSpec, menuHeightMeasureSpec);

    final int contentWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 0, width);
    final int contentHeightMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 0, height);
    mContentContainer.measure(contentWidthMeasureSpec, contentHeightMeasureSpec);

    setMeasuredDimension(width, height);

    updateTouchAreaSize();
  }
Ejemplo n.º 5
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (IMPL instanceof CardViewApi21 == false) {
      final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
      switch (widthMode) {
        case MeasureSpec.EXACTLY:
        case MeasureSpec.AT_MOST:
          final int minWidth = (int) Math.ceil(IMPL.getMinWidth(this));
          widthMeasureSpec =
              MeasureSpec.makeMeasureSpec(
                  Math.max(minWidth, MeasureSpec.getSize(widthMeasureSpec)), widthMode);
          break;
      }

      final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
      switch (heightMode) {
        case MeasureSpec.EXACTLY:
        case MeasureSpec.AT_MOST:
          final int minHeight = (int) Math.ceil(IMPL.getMinHeight(this));
          heightMeasureSpec =
              MeasureSpec.makeMeasureSpec(
                  Math.max(minHeight, MeasureSpec.getSize(heightMeasureSpec)), heightMode);
          break;
      }
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } else {
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
  }
  @Override
  protected void onMeasure(int widthSpec, int heightSpec) {
    // Measure all children.
    int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
    mShutterButton.measure(freeSpec, freeSpec);
    mIndicatorControlWheel.measure(freeSpec, freeSpec);
    mZoomControlWheel.measure(freeSpec, freeSpec);

    // Measure myself. Add some buffer for highlight arc.
    int desiredWidth =
        mShutterButton.getMeasuredWidth() + IndicatorControlWheel.HIGHLIGHT_WIDTH * 4;
    int desiredHeight =
        mShutterButton.getMeasuredHeight() + IndicatorControlWheel.HIGHLIGHT_WIDTH * 4;
    int widthMode = MeasureSpec.getMode(widthSpec);
    int heightMode = MeasureSpec.getMode(heightSpec);
    int measuredWidth, measuredHeight;
    if (widthMode == MeasureSpec.UNSPECIFIED) {
      measuredWidth = desiredWidth;
    } else if (widthMode == MeasureSpec.AT_MOST) {
      measuredWidth = Math.min(desiredWidth, MeasureSpec.getSize(widthSpec));
    } else { // MeasureSpec.EXACTLY
      measuredWidth = MeasureSpec.getSize(widthSpec);
    }
    if (heightMode == MeasureSpec.UNSPECIFIED) {
      measuredHeight = desiredHeight;
    } else if (heightMode == MeasureSpec.AT_MOST) {
      measuredHeight = Math.min(desiredHeight, MeasureSpec.getSize(heightSpec));
    } else { // MeasureSpec.EXACTLY
      measuredHeight = MeasureSpec.getSize(heightSpec);
    }
    setMeasuredDimension(measuredWidth, measuredHeight);
  }
Ejemplo n.º 7
0
  /** {@inheritDoc} */
  @Override
  protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    final int specWidthSize = MeasureSpec.getSize(widthMeasureSpec);
    final int specWidthMode = MeasureSpec.getMode(widthMeasureSpec);
    final int specHeightSize = MeasureSpec.getSize(heightMeasureSpec);
    final int specHeightMode = MeasureSpec.getMode(heightMeasureSpec);

    // We expect to be somewhere inside a MaterialCalendarView, which should measure EXACTLY
    if (specHeightMode == MeasureSpec.UNSPECIFIED || specWidthMode == MeasureSpec.UNSPECIFIED) {
      throw new IllegalStateException("MonthView should never be left to decide it's size");
    }

    // The spec width should be a correct multiple
    final int measureTileSize = specWidthSize / DEFAULT_DAYS_IN_WEEK;

    // Just use the spec sizes
    setMeasuredDimension(specWidthSize, specHeightSize);

    int count = getChildCount();
    for (int i = 0; i < count; i++) {
      final View child = getChildAt(i);

      int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(measureTileSize, MeasureSpec.EXACTLY);

      int childHeightMeasureSpec =
          MeasureSpec.makeMeasureSpec(measureTileSize, MeasureSpec.EXACTLY);

      child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
    }
  }
Ejemplo n.º 8
0
  // 测量当前布局,修改测量规则
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // 获取宽度模式
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    // 得到宽度
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    // 去除左右内边距,得到真实的宽度
    widthSize = widthSize - this.getPaddingLeft() - this.getPaddingRight();

    // 获取宽度模式
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    // 得到高度
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    // 去除上下内边距,得到真实的高度
    heightSize = heightSize - this.getPaddingTop() - this.getPaddingBottom();

    // 哪个是精确值,就以哪个为基准进行按比例设置
    if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY) {
      // 对高度进行根据宽度的比例设置,+0.5是为了四舍五入
      heightSize = (int) (widthSize / ratio + 0.5);
    } else if (widthMode != MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY) {
      // 由于高度是精确的值 ,宽度随着高度的变化而变化
      widthSize = (int) ((heightSize * ratio) + 0.5f);
    }

    // 重新指定测量规则
    widthMeasureSpec =
        MeasureSpec.makeMeasureSpec(
            widthSize + this.getPaddingLeft() + this.getPaddingRight(), MeasureSpec.EXACTLY);
    heightMeasureSpec =
        MeasureSpec.makeMeasureSpec(
            heightSize + this.getPaddingTop() + this.getPaddingBottom(), MeasureSpec.EXACTLY);

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }
Ejemplo n.º 9
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    int width;
    int height;
    if (widthMode == MeasureSpec.EXACTLY) {
      width = widthSize;
    } else {
      int desired =
          (int)
              (getPaddingLeft() + getPaddingRight() + rectDst.width() + bitmapBaseLine.getWidth());
      width = desired;
    }

    if (heightMode == MeasureSpec.EXACTLY) {
      height = heightSize;
    } else {
      int desired;
      if (valueNode2 != null) {
        desired = (int) (getPaddingTop() + getPaddingBottom() + rectDst.height() * 3 / 2);
        height = desired;
      } else {
        desired = (int) (getPaddingTop() + getPaddingBottom() + rectDst.height());
        height = desired;
      }
    }
    setMeasuredDimension(width, height);
  }
Ejemplo n.º 10
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = 0;
    int height = 0;

    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    if (widthMode == MeasureSpec.EXACTLY) {
      width = widthSize;
    } else {
      width = mDrbBackground == null ? 0 : mDrbBackground.getIntrinsicWidth();
      if (widthMode == MeasureSpec.AT_MOST) {
        width = Math.min(width, widthSize);
      }
    }

    if (heightMode == MeasureSpec.EXACTLY) {
      height = heightSize;
    } else {
      height = mDrbBackground == null ? 0 : mDrbBackground.getIntrinsicHeight();
      if (heightMode == MeasureSpec.AT_MOST) {
        height = Math.min(height, heightSize);
      }
    }

    if (null != mDrbBackground) {
      mDrbBackground.setBounds(0, 0, width, height);
    }
    mRawProgressBounds.set(
        getPaddingLeft(), getPaddingTop(), width - getPaddingRight(), height - getPaddingBottom());
    setMeasuredDimension(width, height);
  }
Ejemplo n.º 11
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);

    int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);

    switch (widthMode) {
      case MeasureSpec.UNSPECIFIED:
        widthSize = getSuggestedMinimumWidth();
        break;
      case MeasureSpec.AT_MOST:
        widthSize = Math.min(widthSize, getSuggestedMinimumWidth());
        break;
    }

    switch (heightMode) {
      case MeasureSpec.UNSPECIFIED:
        heightSize = getSuggestedMinimumHeight();
        break;
      case MeasureSpec.AT_MOST:
        heightSize = Math.min(heightSize, getSuggestedMinimumHeight());
        break;
    }

    setMeasuredDimension(widthSize, heightSize);
  }
Ejemplo n.º 12
0
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
   int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
   int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
   int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
   measureChildren(widthMeasureSpec, heightMeasureSpec);
   int childCount = getChildCount();
   if (childCount == 0) {
     setMeasuredDimension(0, 0);
   } else if (heightSpecMode == MeasureSpec.AT_MOST && widthSpecMode == MeasureSpec.AT_MOST) {
     // 即如果宽高都是wrap_content,那么测量的宽应该是单个子view的宽度乘以个数,高为单个view的高度
     View view = getChildAt(0);
     heightSpecSize = view.getMeasuredHeight();
     widthMeasureSpec = view.getMeasuredWidth() * childCount; // 假定所有子view的宽度相同
     setMeasuredDimension(widthSpecSize, heightSpecSize);
   } else if (heightSpecMode == MeasureSpec.AT_MOST) {
     // 高是wrap_content,那么高度应该是单个子view的高度,宽度为屏幕宽度
     View view = getChildAt(0);
     heightSpecSize = view.getMeasuredHeight();
     setMeasuredDimension(widthSpecSize, heightSpecSize);
   } else if (widthSpecMode == MeasureSpec.AT_MOST) {
     // 宽是wrap_content,那么高度应该是屏幕高度,宽度为子view的宽度乘以个数
     View view = getChildAt(0);
     widthSpecSize = view.getMeasuredWidth() * childCount;
     setMeasuredDimension(widthSpecSize, heightSpecSize);
   }
 }
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    float textSize = getTextSize();
    float textLen = getText().length();
    mRadius = Math.round(2 * textSize);
    mTickLen = Math.round(mRadius / 180 * 3.14 * mSweepAngMin);
    mMaxRippleWidth = mRadius;
    mLineWidth = Math.round(mRadius / 10);
    mRippleWidth = mLineWidth;
    mInitRippleWidth = mRippleWidth;
    mRecWidth = textLen * textSize;
    float mWidth = mRecWidth + 2 * (mRadius + mLineWidth + mMaxRippleWidth);
    float mHeight = 2 * (mRadius + mLineWidth + mMaxRippleWidth);
    mLineRadius = mRadius + mLineWidth;
    cxLeft = mLineRadius + mMaxRippleWidth;
    cyLeft = mLineRadius + mMaxRippleWidth;
    cxRight = cxLeft + mRecWidth;
    cyRight = cyLeft;

    mLinePaint.setStrokeWidth(mLineWidth);
    mLinePaint.setStrokeCap(Paint.Cap.ROUND);
    mTickPaint.setStrokeWidth(mLineWidth);
    mTickPaint.setStrokeCap(Paint.Cap.ROUND);

    int width = MeasureSpec.makeMeasureSpec((int) mWidth, MeasureSpec.getMode(widthMeasureSpec));
    int height = MeasureSpec.makeMeasureSpec((int) mHeight, MeasureSpec.getMode(heightMeasureSpec));
    super.onMeasure(width, height);
  }
Ejemplo n.º 14
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int fWidth;
    int fHeight;
    int wSize = MeasureSpec.getSize(widthMeasureSpec);
    int wMode = MeasureSpec.getMode(widthMeasureSpec);
    int hSize = MeasureSpec.getSize(heightMeasureSpec);
    int hMode = MeasureSpec.getMode(heightMeasureSpec);
    if (wMode == MeasureSpec.EXACTLY) {
      fWidth = wSize;
    } else {
      mPaint.setTextSize(mTextSize);
      mPaint.getTextBounds(mInt, 0, mInt.length(), mBound);
      int tepWidth = (int) (getPaddingLeft() + mBound.width() + getPaddingRight());
      fWidth = tepWidth;
    }
    if (hMode == MeasureSpec.EXACTLY) {
      fHeight = hSize;
    } else {

      mPaint.setTextSize(mTextSize);
      mPaint.getTextBounds(mInt, 0, mInt.length(), mBound);
      int tepHeight = getPaddingTop() + mBound.height() + getPaddingBottom();
      fHeight = tepHeight;
    }
    radius = Math.max(fHeight, fWidth) / 2;
    setMeasuredDimension(radius * 2, radius * 2);
  }
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);

    int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);

    if (widthSpecMode == MeasureSpec.UNSPECIFIED || heightSpecMode == MeasureSpec.UNSPECIFIED) {
      throw new RuntimeException("SlidingDrawer cannot have UNSPECIFIED dimensions");
    }

    final View handle = mHandle;
    measureChild(handle, widthMeasureSpec, heightMeasureSpec);

    if (mVertical) {
      int height = heightSpecSize - handle.getMeasuredHeight() - mTopOffset;
      mContent.measure(
          MeasureSpec.makeMeasureSpec(widthSpecSize, MeasureSpec.EXACTLY),
          MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
    } else {
      int width = widthSpecSize - handle.getMeasuredWidth() - mTopOffset;
      mContent.measure(
          MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
          MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY));
    }

    setMeasuredDimension(widthSpecSize, heightSpecSize);
  }
Ejemplo n.º 16
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO: 16/3/29
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);

    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    int width;
    int height;

    if (widthMode == MeasureSpec.EXACTLY) {
      width = widthSize;
    } else {
      mPaint.setTextSize(mTitleSize);
      mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mBound);
      float textWidth = mBound.width();
      int desired = (int) (getPaddingLeft() + textWidth + getPaddingRight());
      width = desired;
    }

    if (heightMode == MeasureSpec.EXACTLY) {
      height = heightSize;
    } else {
      mPaint.setTextSize(mTitleSize);
      mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mBound);
      float textHeight = mBound.height();
      int desired = (int) (getPaddingTop() + textHeight + getPaddingBottom());
      height = desired;
    }

    setMeasuredDimension(width, height);
  }
Ejemplo n.º 17
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = 0;
    int height = 0;

    // 设置宽度
    int specMode = MeasureSpec.getMode(widthMeasureSpec);
    int specSize = MeasureSpec.getSize(widthMeasureSpec);
    switch (specMode) {
      case MeasureSpec.EXACTLY: // 明确指定
        width = getPaddingLeft() + getPaddingRight() + specSize;
        break;
      case MeasureSpec.AT_MOST: // WARP_CONTENT
        width = getPaddingLeft() + getPaddingRight() + textBound.width();
        break;
    }

    // 设置高度
    specMode = MeasureSpec.getMode(heightMeasureSpec);
    specSize = MeasureSpec.getSize(heightMeasureSpec);
    switch (specMode) {
      case MeasureSpec.EXACTLY:
        height = getPaddingTop() + getPaddingBottom() + specSize;
        break;
      case MeasureSpec.AT_MOST:
        height = getPaddingTop() + getPaddingBottom() + textBound.height();
        break;
    }

    setMeasuredDimension(width, height);
  }
Ejemplo n.º 18
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    int width;
    int height;
    // 代表设置了具体的数值,就用界面传递过来的
    if (widthMode == MeasureSpec.EXACTLY) {
      width = widthSize;
    } else {
      // 其他模式就自己计算
      width = (int) (getPaddingLeft() + mRadius * 2 + mStrokeWidth * 2 + getPaddingRight());
    }

    if (heightMode == MeasureSpec.EXACTLY) {
      height = heightSize;
    } else {
      height = (int) (getPaddingTop() + mRadius * 2 + mStrokeWidth * 2 + getPaddingBottom());
    }

    setMeasuredDimension(width, height);
  }
Ejemplo n.º 19
0
  // 测量当前布局
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // widthMeasureSpec 宽度的规则 包含了两部分 模式 值
    int widthMode = MeasureSpec.getMode(widthMeasureSpec); // 模式
    int widthSize = MeasureSpec.getSize(widthMeasureSpec); // 宽度大小
    int width = widthSize - getPaddingLeft() - getPaddingRight(); // 去掉左右两边的padding

    int heightMode = MeasureSpec.getMode(heightMeasureSpec); // 模式
    int heightSize = MeasureSpec.getSize(heightMeasureSpec); // 高度大小
    int height = heightSize - getPaddingTop() - getPaddingBottom(); // 去掉上下两边的padding

    if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY) {
      // 修正一下 高度的值 让高度=宽度/比例
      height = (int) (width / ratio + 0.5f); // 保证4舍五入
    } else if (widthMode != MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY) {
      // 由于高度是精确的值 ,宽度随着高度的变化而变化
      width = (int) ((height * ratio) + 0.5f);
    }
    // 重新制作了新的规则
    widthMeasureSpec =
        MeasureSpec.makeMeasureSpec(
            MeasureSpec.EXACTLY, width + getPaddingLeft() + getPaddingRight());
    heightMeasureSpec =
        MeasureSpec.makeMeasureSpec(
            MeasureSpec.EXACTLY, height + getPaddingTop() + getPaddingBottom());

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }
Ejemplo n.º 20
0
  /**
   * Overriding onMeasure to handle the case where WRAP_CONTENT might be specified in the layout.
   * Since we don't know the dimensions of the profile photo, we need to handle this case
   * specifically.
   *
   * <p>The approach is to default to a NORMAL sized amount of space in the case that a preset size
   * is not specified. This logic is applied to both width and height
   */
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    ViewGroup.LayoutParams params = getLayoutParams();
    boolean customMeasure = false;
    int newHeight = MeasureSpec.getSize(heightMeasureSpec);
    int newWidth = MeasureSpec.getSize(widthMeasureSpec);
    if (MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.EXACTLY
        && params.height == ViewGroup.LayoutParams.WRAP_CONTENT) {
      newHeight = getPresetSizeInPixels(true); // Default to a preset size
      heightMeasureSpec = MeasureSpec.makeMeasureSpec(newHeight, MeasureSpec.EXACTLY);
      customMeasure = true;
    }

    if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.EXACTLY
        && params.width == ViewGroup.LayoutParams.WRAP_CONTENT) {
      newWidth = getPresetSizeInPixels(true); // Default to a preset size
      widthMeasureSpec = MeasureSpec.makeMeasureSpec(newWidth, MeasureSpec.EXACTLY);
      customMeasure = true;
    }

    if (customMeasure) {
      // Since we are providing custom dimensions, we need to handle the measure
      // phase from here
      setMeasuredDimension(newWidth, newHeight);
      measureChildren(widthMeasureSpec, heightMeasureSpec);
    } else {
      // Rely on FrameLayout to do the right thing
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
  }
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   // 父容器传过来的宽度方向上的模式
   int widthMode = MeasureSpec.getMode(widthMeasureSpec);
   // 父容器传过来的高度方向上的模式
   int heightMode = MeasureSpec.getMode(heightMeasureSpec);
   // 父容器传过来的宽度的值
   int width = MeasureSpec.getSize(widthMeasureSpec) - getPaddingLeft() - getPaddingRight();
   // 父容器传过来的高度的值
   int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingLeft() - getPaddingRight();
   if (widthMode == MeasureSpec.EXACTLY && heightMode != MeasureSpec.EXACTLY && ratio != 0.0f) {
     // 判断条件为,宽度模式为Exactly,也就是填充父窗体或者是指定宽度;
     // 且高度模式不是Exaclty,代表设置的既不是fill_parent也不是具体的值,于是需要具体测量
     // 且图片的宽高比已经赋值完毕,不再是0.0f
     // 表示宽度确定,要测量高度
     height = (int) (width / ratio + 0.5f);
     heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
   } else if (widthMode != MeasureSpec.EXACTLY
       && heightMode == MeasureSpec.EXACTLY
       && ratio != 0.0f) {
     // 判断条件跟上面的相反,宽度方向和高度方向的条件互换
     // 表示高度确定,要测量宽度
     width = (int) (height * ratio + 0.5f);
     widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
   }
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 }
Ejemplo n.º 22
0
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);

    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    int prefWidth = this.tnContainer.getPreferredWidth();
    int prefHeight = this.tnContainer.getPreferredHeight();

    if (prefWidth > 0
        && (widthMode == MeasureSpec.UNSPECIFIED
            || widthMode == MeasureSpec.AT_MOST
            || widthMode == MeasureSpec.EXACTLY)) {
      if (widthSize > 0 && prefWidth > widthSize) prefWidth = widthSize;

      widthMeasureSpec = MeasureSpec.makeMeasureSpec(prefWidth, MeasureSpec.EXACTLY);
    }

    if (prefHeight > 0
        && (heightMode == MeasureSpec.UNSPECIFIED
            || heightMode == MeasureSpec.AT_MOST
            || heightMode == MeasureSpec.EXACTLY)) {
      if (heightSize > 0 && prefHeight > heightSize) prefHeight = heightSize;

      heightMeasureSpec = MeasureSpec.makeMeasureSpec(prefHeight, MeasureSpec.EXACTLY);
    }

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }
Ejemplo n.º 23
0
  protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    // Measure Width
    if (widthMode == MeasureSpec.EXACTLY) {
      // Must be this size
      width = widthSize;
    } else if (widthMode == MeasureSpec.AT_MOST) {
      // Can't be bigger than...
      width = Math.min(50, widthSize);
    } else {
      // Be whatever you want
      width = 100;
    }

    // Measure Height
    if (heightMode == MeasureSpec.EXACTLY) {
      // Must be this size
      height = heightSize;
    } else if (heightMode == MeasureSpec.AT_MOST) {
      // Can't be bigger than...
      height = Math.min(80, heightSize);
    } else {
      // Be whatever you want
      height = 73;
    }

    // Satisfy contract by calling setMeasuredDimension
    setMeasuredDimension(width, height);
  }
Ejemplo n.º 24
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = 0;
    int height = 0;

    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);

    int widthAllowed = MeasureSpec.getSize(widthMeasureSpec);
    int heightAllowed = MeasureSpec.getSize(heightMeasureSpec);

    widthAllowed = chooseWidth(widthMode, widthAllowed);
    heightAllowed = chooseHeight(heightMode, heightAllowed);

    width = (int) (heightAllowed + HUE_PANEL_WIDTH);

    if (width > widthAllowed) {
      width = widthAllowed;
      height = (int) (widthAllowed - HUE_PANEL_WIDTH);
    } else {
      height = heightAllowed;
    }

    setMeasuredDimension(width, height);
  }
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    rebuildItems(); // rebuilding before measuring

    int height = calculateLayoutHeight(heightSize, heightMode);

    int width;
    if (widthMode == MeasureSpec.EXACTLY) {
      width = widthSize;
    } else {
      width =
          Math.max(
              getItemDimension() * (mVisibleItems - mItemOffsetPercent / 100),
              getSuggestedMinimumWidth());

      if (widthMode == MeasureSpec.AT_MOST) {
        width = Math.min(width, widthSize);
      }
    }
    setMeasuredDimension(width, height);
  }
Ejemplo n.º 26
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int measuredWidth = 0;
    int measuredHeight = 0;

    if (mUIElement != null) {
      final int paddingLeft = getPaddingLeft();
      final int paddingTop = getPaddingTop();
      final int paddingRight = getPaddingRight();
      final int paddingBottom = getPaddingBottom();

      final int viewWidthSize = MeasureSpec.getSize(widthMeasureSpec);
      final int viewWidthMode = MeasureSpec.getMode(widthMeasureSpec);
      final int viewHeightSize = MeasureSpec.getSize(heightMeasureSpec);
      final int viewHeightMode = MeasureSpec.getMode(heightMeasureSpec);

      final int elementWidth = viewWidthSize - paddingLeft - paddingRight;
      final int elementWidthSpec = MeasureSpec.makeMeasureSpec(elementWidth, viewWidthMode);
      final int elementHeight = viewHeightSize - paddingTop - paddingBottom;
      final int elementHeightSpec = MeasureSpec.makeMeasureSpec(elementHeight, viewHeightMode);

      mUIElement.measure(elementWidthSpec, elementHeightSpec);

      measuredWidth = mUIElement.getMeasuredWidth() + paddingLeft + paddingRight;
      measuredHeight = mUIElement.getMeasuredHeight() + paddingTop + paddingBottom;
    }

    measuredWidth = Math.max(measuredWidth, getSuggestedMinimumWidth());
    measuredHeight = Math.max(measuredHeight, getSuggestedMinimumHeight());

    setMeasuredDimension(measuredWidth, measuredHeight);
  }
Ejemplo n.º 27
0
 // ----------------------------------
 // Setting up stuff
 // ----------------------------------
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   int viewWidth = circleRadius + this.getPaddingLeft() + this.getPaddingRight();
   int viewHeight = circleRadius + this.getPaddingTop() + this.getPaddingBottom();
   int widthMode = MeasureSpec.getMode(widthMeasureSpec);
   int widthSize = MeasureSpec.getSize(widthMeasureSpec);
   int heightMode = MeasureSpec.getMode(heightMeasureSpec);
   int heightSize = MeasureSpec.getSize(heightMeasureSpec);
   int width;
   int height;
   // Measure Width
   if (widthMode == MeasureSpec.EXACTLY) {
     // Must be this size
     width = widthSize;
   } else if (widthMode == MeasureSpec.AT_MOST) {
     // Can't be bigger than...
     width = Math.min(viewWidth, widthSize);
   } else {
     // Be whatever you want
     width = viewWidth;
   }
   // Measure Height
   if (heightMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.EXACTLY) {
     // Must be this size
     height = heightSize;
   } else if (heightMode == MeasureSpec.AT_MOST) {
     // Can't be bigger than...
     height = Math.min(viewHeight, heightSize);
   } else {
     // Be whatever you want
     height = viewHeight;
   }
   setMeasuredDimension(width, height);
 }
Ejemplo n.º 28
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);

    int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);

    if (widthSpecMode == MeasureSpec.UNSPECIFIED || heightSpecMode == MeasureSpec.UNSPECIFIED) {
      throw new RuntimeException("View cannot have UNSPECIFIED dimensions");
    }

    mMainView.measure(widthMeasureSpec, heightMeasureSpec);

    int leftViewWidth = (int) (widthSpecSize - mLeftViewRightPadding);
    mLeftView.measure(
        MeasureSpec.makeMeasureSpec(leftViewWidth, MeasureSpec.EXACTLY),
        MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY));

    int rightViewWidth = (int) (widthSpecSize - mRightViewLeftPadding);
    mRightView.measure(
        MeasureSpec.makeMeasureSpec(rightViewWidth, MeasureSpec.EXACTLY),
        MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY));

    setMeasuredDimension(widthSpecSize, heightSpecSize);
  }
Ejemplo n.º 29
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable drawable = getDrawable();
    if (drawable == null
        || drawable.getIntrinsicWidth() == 0
        || drawable.getIntrinsicHeight() == 0) {
      setMeasuredDimension(0, 0);
      return;
    }

    int drawableWidth = drawable.getIntrinsicWidth();
    int drawableHeight = drawable.getIntrinsicHeight();
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    viewWidth = setViewSize(widthMode, widthSize, drawableWidth);
    viewHeight = setViewSize(heightMode, heightSize, drawableHeight);

    //
    // Set view dimensions
    //
    setMeasuredDimension(viewWidth, viewHeight);

    //
    // Fit content within view
    //
    fitImageToView();
  }
Ejemplo n.º 30
0
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int resultWidth = 0;
    int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
    int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);

    if (modeWidth == MeasureSpec.EXACTLY) {
      resultWidth = sizeWidth;
    } else {
      resultWidth = defaultWidth;
      if (modeWidth == MeasureSpec.AT_MOST) {
        resultWidth = Math.min(resultWidth, sizeWidth);
      }
    }

    int resultHeight = 0;
    int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
    int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
    if (modeHeight == MeasureSpec.EXACTLY) {
      resultHeight = sizeHeight;
    } else {
      resultHeight = defaultHeight;
      if (modeHeight == MeasureSpec.AT_MOST) {
        resultHeight = Math.min(resultHeight, sizeHeight);
      }
    }

    setMeasuredDimension(resultWidth, resultHeight);
  }