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;

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>