-
@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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/378237.html
標籤:其他
