Android高階進階之路【一】Android中View繪製流程淺析
前言
一 、表示與選擇之列舉
1.1列舉的定義
public enum Color { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
enum class Color { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
1.2 帶屬性的列舉類
public enum Color { RED(255, 0, 0), //當每個變數建立的時候,指定屬性值 ORANGE(255, 165, 0), //逗號是必須的 YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255), INDIGO(75, 0, 130), VIOLET(238, 130, 238); private int r; private int g; private int b; Color(int r, int g, int b) { this.r = r; this.g = g; this.b = b; } public int getRGB(){ return (r * 256 + g * 256 + b*256); } public int getR() { return r; } public int getG() { return g; } public int getB() { return b; } }
enum class Color( val r: Int, val g: Int, val b: Int //宣告列舉常量的屬性 ) { RED(255, 0, 0), //當每個變數建立的時候,指定屬性值 ORANGE(255, 165, 0), //逗號是必須的 YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255), INDIGO(75, 0, 130), VIOLET(238, 130, 238); fun rgb() = (r * 256 + g * 256 + b*256)//定義列舉的方法 }
二 、表示與選擇之When
2.1 使用“when”來處理列舉
fun getMnemonic(color: Color) = //直接返回一個“when”的表示式 when (color) { //如果顏色等於列舉常量,返回響應的字串 Color.RED -> "Richard" Color.ORANGE -> "Of" Color.YELLOW -> "York" Color.GREEN -> "Gave" Color.BLUE -> "Battle" Color.INDIGO -> "In" Color.VIOLET -> "Vain" } println(getMnemonic(Color.BLUE)) // Battle
fun getWarmth(color: Color) = when(color) { Color.RED, Color.ORANGE, Color.YELLOW -> "warm" Color.GREEN -> "neutral" Color.BLUE, Color.INDIGO, Color.VIOLET -> "cold" } println(getWarmth(Color.ORANGE)) //warm
import ch02.colors.Color //匯入宣告在另外一個包的Color類 import ch02.colors.Color.*//用名字顯示匯入列舉常量 fun getWarmth(color: Color) = when(color) { RED, ORANGE, YELLOW -> "warm" //用名字匯入常量 GREEN -> "neutral" BLUE, INDIGO, VIOLET -> "cold" }
2.2 在"when"結構中使用任意物件
fun mix(c1: Color, c2: Color) = when (setOf(c1, c2)) {//when表示式的引數可以是任何例項,用來被分支條件檢查 setOf(RED, YELLOW) -> ORANGE//列舉可以混合的顏色對 setOf(YELLOW, BLUE) -> GREEN setOf(BLUE, VIOLET) -> INDIGO else -> throw Exception("Dirty color")//執行這個,如果沒有分支可以匹配 } println(mix(BLUE, YELLOW))//GREEN
2.3 使用不帶引數的when
fun mixOptimized(c1: Color, c2: Color) = //沒有實參傳給when when { (c1 == RED && c2 == YELLOW) || (c1 == YELLOW && c2 == RED) -> ORANGE (c1 == YELLOW && c2 == BLUE) || (c1 == BLUE && c2 == YELLOW) -> GREEN (c1 == BLUE && c2 == VIOLET) || (c1 == VIOLET && c2 == BLUE) -> INDIGO else -> throw Exception("Dirty color") } println(mixOptimized(BLUE, YELLOW)) //GREEN
2.4 程式碼塊作為"if"和"when"的分支
fun evalWithLogging(e: Expr): Int = when (e) { is Num -> { println("num: ${e.value}") e.value //如果e是Num型別,這是程式碼塊最後一個表示式,並被返回 } is Sum -> { val left = evalWithLogging(e.left) val right = evalWithLogging(e.right) println("sum: $left + $right") left + right//如果表示式被返回當e是Sum型別 } else -> throw IllegalArgumentException("Unknown expression") } println(evalWithLogging(Sum(Sum(Num(1), Num(2)), Num(4)))) //num: 1 //num: 2 //sum: 1 + 2 //num: 4 //sum: 3 + 4 //7
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2840433/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android進階(五)View繪製流程AndroidView
- 【Android進階】RecyclerView之繪製流程(三)AndroidView
- 靈魂畫師,Android繪製流程——Android高階UIAndroidUI
- 高階 Android 工程師的進階之路Android工程師
- Android高階進階之路【四】一文讀懂 Handler 機制Android
- Android原始碼分析之View繪製流程Android原始碼View
- Android高階進階之路【五】深入剖析Android系統Binder通訊機制Android
- Android View繪製原理:繪製流程排程、測算等AndroidView
- Android高階進階之路【二】十分鐘徹底弄明白 View 事件分發機制AndroidView事件
- 探究Android View 繪製流程,Canvas 的由來AndroidViewCanvas
- Android View繪製流程看這篇就夠了AndroidView
- 探究 Android View 繪製流程,Activity 的 View 如何展示到螢幕AndroidView
- Android自定義View之(一)View繪製流程詳解——向原始碼要答案AndroidView原始碼
- Android高階進階之路【三】看完這篇再不會Android動畫框架,我跪搓衣板Android動畫框架
- Android進階(七)Android中的ClassLoaderAndroid
- Android進階:十四、熟悉Android打包編譯的流程Android編譯
- Android系統原始碼分析--View繪製流程之-inflateAndroid原始碼View
- Android系統原始碼分析–View繪製流程之-setContentViewAndroid原始碼View
- Android系統原始碼分析--View繪製流程之-setContentViewAndroid原始碼View
- View繪製01-Android渲染系統中的ViewViewAndroid
- Android View的繪製過程AndroidView
- 【進階 6-1 期】JavaScript 高階函式淺析JavaScript函式
- Java初級~中級~高階進階之路Java
- Android View繪製原始碼分析 MeasureAndroidView原始碼
- View的繪製二:View的繪製流程View
- 你的Android資深工程師進階之路Android工程師
- Flutter佈局和繪製流程淺析Flutter
- 【Android進階】RecyclerView之ItemDecoration(一)AndroidView
- Android進階——自定義View之雙向選擇SeekbarAndroidView
- Android進階:九、自定義View之手寫Loading動效AndroidView
- Android UI繪製流程及原理AndroidUI
- Flutter Android 端啟動流程淺析FlutterAndroid
- View 繪製流程分析View
- Android View 原始碼解析(三) – View的繪製過程AndroidView原始碼
- Canvas中的繪圖師講解與實戰——Android高階UICanvas繪圖AndroidUI
- Fragment中的那些坑——Android進階FragmentAndroid
- Android開發進階——自定義View的使用及其原理探索AndroidView
- Android高階知識點Android