氛圍燈動態屏保取色方案一
氛圍燈並不支持所有的顏色,只能支持256色,所以在取到圖片顏色後需要根據結果顏色去跟氛圍燈所支持的256色對比,取最接近的結果色,然後同步到氛圍燈顯示 取色流程 取色需要用到原生 Palette.from(bitmap).generate() 方法,通過量化算法分析位圖的像素顏色分佈,提取最具代表性的顏色組合,也有異步獲取方法,下面方法都處於子線程,所以這裏直接使用同步方法 查看androidx.
氛圍燈並不支持所有的顏色,只能支持256色,所以在取到圖片顏色後需要根據結果顏色去跟氛圍燈所支持的256色對比,取最接近的結果色,然後同步到氛圍燈顯示 取色流程 取色需要用到原生 Palette.from(bitmap).generate() 方法,通過量化算法分析位圖的像素顏色分佈,提取最具代表性的顏色組合,也有異步獲取方法,下面方法都處於子線程,所以這裏直接使用同步方法 查看androidx.
hue查找:整體偏差不會很大,但是對於亮度較高存在誤差,精準度不夠 lab查找:整體一般,但是精準度較好,不過算法複雜,增加耗時 hue色相查找存在誤差,在有限的256色中,匹配的規則需要調整 這裏使用lab算法提高精準度 RGB轉Lab fun rGBToLab(r: Int, g: Int, b: Int): DoubleArray { // 處理負值(如-256
3D車模通過TaskView顯示在Launcher,首先需要知道,為什麼要用TaskView,而不是Activity,然後在説加載流程 1、surface比activity等效率更高,特別是針對車模跟地圖等重量級場景 2、切換桌面等場景時,可以更精確的控制暫停恢復 3、進程隔離,更精細的生命週期管理跟控制 4、taskView中SurfaceControl的跨進程綁定機制(reparent操作)效
車模桌面加載成功後,需要各種交互 切換桌面處理 先補充如何切換桌面,初始化需要指定一個默認桌面,初始化其實兩個桌面都會一起加載,假設默認是車模桌面,地圖將不會初始化操作,但是地圖桌面會內嵌到Launcher中 兩個桌面是互斥的,基於這種模式下,就需要隱藏另一個桌面,因為切換動效的緣故,這裏直接使用setTranslationX移出屏幕外處理 為了讓兩個桌面互斥,需要通過mActivityManag
方案一、aar架包集成 最簡單直接的方案,卡片側實現,打成aar包提供到launcher顯示 方案二、AppWidget 原生的桌面小組件方案,被限制無法自定義view 底層通過BroadcastReceiver實現 方案三、插件方案 插件方案有好幾種,實現原理都是通過配置實現,其中有Service,BroadcastReceiver,Plugin 在SystemUI模塊中,狀態欄等模塊很多使用的