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); } } }
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; }