java 枚举,android零基础开发
-
@param name - The name of this enum constant, which is the identifier
-
used to declare it.
-
@param ordinal - The ordinal of this enumeration constant (its position
-
in the enum declaration, where the initial constant is assigned
-
an ordinal of zero).
*/
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
那么对于上面SeasonEnum定义的枚举,枚举实例的name和ordinal分别是什么呢?
public enum SeasonEnum {
SPRING, SUMMER, AUTUMN, WINTER;
}
//对于春夏秋冬实例编译器通过下面的构造方法怎么创建呢?
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
//name是实例的字符串名称,ordinal是从0开始依次+1
SPRING = new Enum(“SPRING”, 0);
SUMMER = new Enum(“SUMMER”, 1);
AUTUMN = new Enum(“AUTUMN”, 2);
WINTER = new Enum(“WINTER”, 3);
name()和ordinal()方法分别返回是name和ordinal的值,Enum的toString方法默认也是返回的name属性。compareTo方法比较的是两个枚举实例的ordinal差值。
还有一个编译器为我们生成的静态values()方法,返回我们定义的枚举实例对象的数组
SeasonEnum[] seasonEnums = SeasonEnum.values();
for (SeasonEnum seasonEnum : seasonEnums) {
Log.e(TAG, “main: seasonEnum=” + seasonEnum);
}
//运行输出结果就是
SPRING
SUMMER
AUTUMN
WINTER
3. Android系统源码中枚举的使用
//时钟样式枚举,数字和表盘两种样式
//源码链接如下http://androidxref.com/9.0.0_r3/xref/packages/apps/DeskClock/src/com/android/deskclock/data/DataModel.java#55
/** Indicates the display style of clocks. */
public enum ClockStyle {ANALOG, DIGITAL}
/**
-
The preferred starting day of the week can differ by locale. This enumerated value is used to
-
describe the preferred ordering.
*/
public enum Order {
SAT_TO_FRI(SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY),
SUN_TO_SAT(SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY),
MON_TO_SUN(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY);
private final List mCalendarDays;
Order(Integer… calendarDays) {
mCalendarDays = Arrays.asList(calendarDays);
}
public List
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
getCalendarDays() {
return mCalendarDays;
}
}
/**
- 源码ImageView的缩放类型,android的老铁们肯定不陌生
*/
public enum ScaleType {
MATRIX (0),
FIT_XY (1),
FIT_START (2),
FIT_CENTER (3),
FIT_END (4),
CENTER (5),
CENTER_CROP (6),
CENTER_INSIDE (7);
ScaleType(int ni) {
nativeInt = ni;
}
final int nativeInt;
}
4. 模拟演练
上图是redmi k40相机录像模式中的功能,针对视频的尺寸和帧率这里用枚举实现一下(特别声明:本人不是小米红米员工,也没看过他们的代码,只是根据自己的理解来用枚举实现,如果有做过相机类似功能的大佬也欢迎提出正宗的方案)
public enum VideoSizeFPSEnum {
VIDEO_720P_30FPS(1280, 720, 30),
VIDEO_1080P_30FPS(1920, 1080, 30),
VIDEO_1080P_60FPS(1920, 1080, 60),
VIDEO_4K_30FPS(3840, 2160, 30);
private final int videoWidth;
private final int videoHeight;
private final int videoFPS;
VideoSizeFPSEnum(int videoWidth, int videoHeight, int videoFPS) {
this.videoWidth = videoWidth;
this.videoHeight = videoHeight;
this.videoFPS = videoFPS;
}
public int getVideoWidth() {
return videoWidth;
}
public int getVideoHeight() {
return videoHeight;
}
public int getVideoFPS() {
return videoFPS;