2021SC@SDUSC
Hippy项目源码分析第一周
layout\android\java\flex
本周分析layout\android\java\flex目录下的部分代码
Hippy中为了方便移动端编写布局,默认支持了现在移动端最流行的Flex布局,同时仅支持Flex布局。
flex\FlexAlign.java
package com.tencent.mtt.hippy.dom.flex;
public enum FlexAlign {
AUTO,
FLEX_START,
CENTER,
FLEX_END,
STRETCH,
BASELINE,
SPACE_BETWEEN,
SPACE_AROUND,;
public static FlexAlign fromInt(int value) {
switch (value) {
case 0: return AUTO;
case 1: return FLEX_START;
case 2: return CENTER;
case 3: return FLEX_END;
case 4: return STRETCH;
case 5: return BASELINE;
case 6: return SPACE_BETWEEN;
case 7: return SPACE_AROUND;
default: throw new IllegalArgumentException("Unknown enum value: " + value);
}
}
}
会根据传入的数据返回不同的类型,从而决定布局的方式,在FlexNodeAPI.java中出现
FlexConstants.java
package com.tencent.mtt.hippy.dom.flex;
public class FlexConstants {
public static final float UNDEFINED = Float.NaN;
public static boolean isUndefined(float value) {
return Float.compare(value, UNDEFINED) == 0;
}
}
是一个负责判断是否尚未定义的函数,此函数在FlexSpacing.java中有调用
FlexCSSDirction.java
package com.tencent.mtt.hippy.dom.flex;
public enum FlexCSSDirection {
ROW,
ROW_REVERSE,
COLUMN,
COLUMN_REVERSE;
public static FlexCSSDirection fromInt(int value) {
switch (value) {
case 0: return ROW;
case 1: return ROW_REVERSE;
case 2: return COLUMN;
case 3: return COLUMN_REVERSE;
default: throw new IllegalArgumentException("Unknown enum value: " + value);
}
}
}
FlexCSSDriection.java是一个枚举类,根据输入来判断不同情况,在FlexNodeAPI.java中出现