當前位置:
首頁 > 科技 > Win10 UWP開發技巧:應用窗口實現毛玻璃效果

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

感謝IT之家網友 DotNet碼農的投稿

前一陣子,各大IT新聞聚合網站紛紛發布了這樣一個新聞:微軟又一次提出了改進版的UI設計語言,Project Neon。從給出的概念圖來看,這種風格涉及到大量的模糊透明,甚至包括窗體背景的透明:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

對於希望第一時間採用新設計語言的開發者來說,任何不提供API支持的UI設計語言都是耍流氓。微軟在SDK 15021版本里提供了實現窗體背景透明的API,自此,Neon設計語言涉及到的所有元素都可以被實現。本文將要闡述的,就是如何編寫一個高斯模糊的覆蓋層,以及如何讓窗體背景半透明。

1、高斯模糊覆蓋層

窗體內的高斯模糊覆蓋層很早就能實現了,這需要藉助Win2D開源項目。新建一個空白的UWP應用程序(C#),準備一張圖片,屆時我會演示如何在這張圖片上疊加一個高斯模糊半透明的覆蓋層。

等待解決方案創建完畢,將事先準備好的圖片添加進項目下的Assets目錄:

然後在MainPage.xaml里編寫代碼,讓它看起來是這個樣子:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

在右上角搜索Nuget並進入Nuget包管理工具,瀏覽並搜索Win2D,並將其安裝到項目:

現在開始編寫C#代碼。為了方便解釋,我們先寫這樣一個函數:

我們來整理一下思路。為了實現一個高斯模糊的覆蓋層,我們首先需要取得充當覆蓋層的UI元件的混成器,然後利用Win2D開源庫創建一個高斯模糊的效果,由於高斯效果需要依賴覆蓋層底部的顯示結果來實現,所以需要取得覆蓋層的BackdropBrush,並將其設置為效果的源,並調整效果的其它參數。然後我們需要把這個效果應用到UI元件,並編寫代碼確保效果區域總是和效果主體的大小保持一致。將上述思路轉化為下面的代碼:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

最後,這個模糊的產生應該在頁面的構造階段,所以在構造函數下引用該方法,使GlassHost獲得高斯模糊效果:

別忘了,這些名稱空間是需要被引用的:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

啟動這個UWP,我們來看看效果:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

效果還不錯,對吧。即使被覆蓋住的是UI元素,這種方法也能保證正確產生高斯效果。

2、UWP窗體半透明

使窗體獲得半透明效果的思路和上面一模一樣,只是被採樣的是整個窗體覆蓋處的顯示。取得這個筆刷需要用到15021以後的SDK,所以新建一個項目,並將其目標平台設置為超過15021的版本:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

記得引用Win2D庫。我們不對XAML作修改,因為我們只是演示如何獲得窗體半透效果。將那個覆蓋了整個頁面的Grid命名為rootGrid:

依然是編寫一個類似的初始化透明效果的方法,但是為了突出效果,我們把模糊參數改成這樣:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

別忘了修改需要獲取的筆刷:

將:

修改為:

同理,在構造函數里,給rootGrid應用效果。執行應用,觀察效果:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

這大概就是我們想要的效果吧。

事實上,採用CreateHostBackdropBrush獲取的背景筆刷,自帶了一個模糊效果(這也是第二個例子里,我們修改高斯模糊參數來降低模糊度的原因)。我們用它作為源再產生高斯效果的目的是為了精確控制模糊。如果你認為目標設備計算能力有限,或者不必精確控制這個模糊,或者你不想引用龐大的Win2D庫,你可以去除對Win2D的引用,並簡化代碼為:

Win10 UWP開發技巧:應用窗口實現毛玻璃效果

這樣你可以直接使用筆刷自帶的模糊,不用引用Win2D庫,但也不能進一步控制模糊。但是切記,上面講到的高斯覆蓋層不能簡化成類似的代碼,因為CreateBackdropBrush方法獲取的筆刷不自帶模糊,你會得到一個全透的(看不見的)覆蓋層。

上面就是為兩種不同的情景產生模糊的方法,可以看出現在關於Neon的API體系比較混雜,這說明微軟對這種風格依然在試驗階段。希望立即跟進的開發者可以利用上面的技巧編寫應用,但是切忌濫用模糊:一方面很難看,另一方面也會消耗大量的計算資源。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT之家 的精彩文章:

最高24期免息,戴爾Alienware機皇全面上市
魅族魅藍E2手機再曝新造型:閃光燈集成到天線帶中
聯想高管談ThinkPad:不會輕易改變外觀設計

TAG:IT之家 |

您可能感興趣

微軟正開發WP分支系統 可運行Win32 UWP應用
使用移動 App 開發框架 Ionic 構建應用的 5 個實用技巧
使用ARKit為iOS開發AR應用
微軟發布ReactXP 方便開發者使用React構建跨平台應用
Pitt開發用于海軍3D列印應用的新HSLA鋼粉
蘋果已收購AR技術開發商!新iPhone 8必支持AR應用?
微軟發布ReactXP:方便開發者構建跨平台應用
從 iOS Basecamp 3 探索混合應用開發的最佳實踐
Win10 MR PC檢查應用登陸應用商店
「瞞天過海」奇招!Win10 PC現可為Xbox One安裝UWP應用
Android O開發套件支持VR應用開發
微軟發布蘋果iOS/安卓版Azure應用:Win10 UWP版在路上
比Win10 S「還強」!微軟Win10 ARM筆記本完整運行x86和UWP應用演示
使用VS Code開發.Net Core 2.0 應用程序
全面回歸!Windows 10照片應用迎來毛玻璃效果
概念設計:應用在「iPhone 8」的顯示效果
《應用商店》Win10 UWP更新:下載速度顯示
IBM 要在上海開「車庫」 專用於為企業開發 iOS 應用
Windows 10 S正式發布:對標谷歌 但應用只能在商店中下載