コード例 #1
0
  public static void fillLines(
      List<ViewDefinition> views, List<LineDefinition> lines, ConfigDefinition config) {
    LineDefinition currentLine = new LineDefinition(config);
    lines.add(currentLine);
    final int count = views.size();
    for (int i = 0; i < count; i++) {
      final ViewDefinition child = views.get(i);

      boolean newLine = child.isNewLine() || (config.isCheckCanFit() && !currentLine.canFit(child));
      if (newLine) {
        currentLine = new LineDefinition(config);
        if (config.getOrientation() == CommonLogic.VERTICAL
            && config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
          lines.add(0, currentLine);
        } else {
          lines.add(currentLine);
        }
      }

      if (config.getOrientation() == CommonLogic.HORIZONTAL
          && config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
        currentLine.addView(0, child);
      } else {
        currentLine.addView(child);
      }
    }
  }
コード例 #2
0
  public static int getGravityFromRelative(int childGravity, ConfigDefinition config) {
    // swap directions for vertical non relative view
    // if it is relative, then START is TOP, and we do not need to switch it here.
    // it will be switched later on onMeasure stage when calculations will be with length and
    // thickness
    if (config.getOrientation() == CommonLogic.VERTICAL
        && (childGravity & Gravity.RELATIVE_LAYOUT_DIRECTION) == 0) {
      int horizontalGravity = childGravity;
      childGravity = 0;
      childGravity |=
          (horizontalGravity & Gravity.HORIZONTAL_GRAVITY_MASK)
              >> Gravity.AXIS_X_SHIFT
              << Gravity.AXIS_Y_SHIFT;
      childGravity |=
          (horizontalGravity & Gravity.VERTICAL_GRAVITY_MASK)
              >> Gravity.AXIS_Y_SHIFT
              << Gravity.AXIS_X_SHIFT;
    }

    // for relative layout and RTL direction swap left and right gravity
    if (config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
        && (childGravity & Gravity.RELATIVE_LAYOUT_DIRECTION) != 0) {
      int ltrGravity = childGravity;
      childGravity = 0;
      childGravity |= (ltrGravity & Gravity.LEFT) == Gravity.LEFT ? Gravity.RIGHT : 0;
      childGravity |= (ltrGravity & Gravity.RIGHT) == Gravity.RIGHT ? Gravity.LEFT : 0;
    }

    return childGravity;
  }