目前的一個(gè)App中需要實(shí)現(xiàn)這個(gè)需求,但是在UWP自帶的Bing Map中,繪制的MapPolyline的StrokeColor的類型是Windows.UI.Color,也就是說一條MapPolyline只支持一種顏色,想要實(shí)現(xiàn)漸變是根本不可能的……但是我又不想說去拒絕視覺的需求,因?yàn)槲矣X得就算是系統(tǒng)提供的漸變畫刷底層肯定也是通過相關(guān)的算法實(shí)現(xiàn)顏色漸變的,所以只要我們認(rèn)真研究一下,最終一樣可以達(dá)到我們想要的需求。
說個(gè)題外話,在這次的思路之前我還產(chǎn)生了其他的思路。當(dāng)時(shí)是想在后臺代碼中實(shí)例化一個(gè)新的Polyline類型的對象(不是地圖元素MapElement中的MapPolyline),因?yàn)?strong style="margin: 0px; padding: 0px;">Polyline的Fill屬性是Brush類型的,而LinearGradientBrush同樣是派生自Brush屬性的,因此可以通過這種方法更為簡單的實(shí)現(xiàn)顏色漸變。但是這樣做了之后發(fā)現(xiàn)了一個(gè)問題:首先這些Polyline是Xaml元素,他們會不斷向上疊加,這樣會遮擋住用來標(biāo)記用戶所在位置的“小圓點(diǎn)”。其次這些Polyline不能夠隨著地圖的縮放而調(diào)整長度或位置,用戶體驗(yàn)非常差,因?yàn)椴豢赡芤粋€(gè)地圖不支持縮放吧……
繞了一個(gè)大坑之后,我最后采用并實(shí)現(xiàn)了以下的算法實(shí)現(xiàn)MapPolyline的StrokeColor屬性的漸變:
1.首先我們先整理一下思路。按照視覺姐姐給的圖,漸變的初始顏色值和最終顏色值是確定的。也就是說我們的漸變色只能在這兩個(gè)值之間變化。但是我們無法判定用戶最終會跑多長的距離,也就意味著我們不能通過得到一個(gè)確定的距離之后進(jìn)行等段線性漸變。那么就要換一種思路,也就是說我們可以設(shè)定一個(gè)確定的范圍長度,第一段這個(gè)長度中的MapPolyline的StrokeColor的色值從初始值線性漸變到最終值,第二段這個(gè)長度中的MapPolyline的StrokeColor的色值再從最終值線性漸變到初始值,以此類推。更簡單的說,就是這個(gè)確定長度的偶數(shù)倍從初始值漸變到最終值,奇數(shù)倍從最終值漸變到初始值。
&