Flutter實現(xiàn)漸變色加描邊字體效果
寫在前面
實現(xiàn)如下圖的效果,這個數(shù)字的內(nèi)部和外部都有漸變色。

內(nèi)容
實現(xiàn)描邊
在網(wǎng)上搜索一輪,可以看到通過用?Stack,來讓兩個?Text疊加,并對上一個?Text設(shè)置外部描邊,就可以得到如下的效果。

Stack(
alignment: Alignment.center,
children: [
Text(
'100',
style: TextStyle(
fontSize: 40,
fontWeight: FontWeight.bold,
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 6
..color = Colors.black),
),
Text(
'100',
style: TextStyle(
color: Colors.white,
fontSize: 40,
fontWeight: FontWeight.bold),
),
],
)
實現(xiàn)漸變
顏色的漸變使用 ShaderMask來進(jìn)行處理,它可以幫我們計算出文字的矩形,然后我們直接設(shè)置給 LinearGradient即可。
在使用 ShaderMask的時候,字體的顏色需要是白色。由于描邊的 Text 我們使用 foreground來添加描邊,故顏色的設(shè)置也應(yīng)該在這里處理,不能像另一個 Text 一樣,在 TextStyle 里的 color屬性設(shè)置,否則會報錯。
Stack(
alignment: Alignment.center,
children: [
ShaderMask(
shaderCallback: (Rect bounds) {
return LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0xFF8F1FFF), Color(0xFFFF00FF)],
).createShader(Offset.zero & bounds.size);
},
child: Text(
'100',
style: TextStyle(
fontSize: 40,
fontWeight: FontWeight.bold,
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 6
..color = Colors.white),
),
),
ShaderMask(
shaderCallback: (Rect bounds) {
return LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.white, Color(0xFFFFBDE9)],
).createShader(Offset.zero & bounds.size);
},
child: Text(
'100',
style: TextStyle(
color: Colors.white,
fontSize: 40,
fontWeight: FontWeight.bold),
),
)
],
)

一些調(diào)整
上面已經(jīng)基本實現(xiàn)了我們最初的效果,但仍存在一點問題,就是文字描邊的邊緣部分有一些露白的情況,這是因為描邊的 strokeWidth有些大,超過了文字的矩形范圍,而我們的漸變渲染范圍只在矩形內(nèi)。
在這里可以看到是有部分越過了左右邊界:

如果用英文字符來看的話,會更明顯:

針對這些情況,我目前是兩種處理:
- 對于左右邊界的情況,給文字前后添加空白字符:

- 對于上下邊界的情況,調(diào)整?
TextStyle里?height屬性:

ShaderMask(
shaderCallback: (Rect bounds) {
return LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0xFF8F1FFF), Color(0xFFFF00FF)],
).createShader(Offset.zero & bounds.size);
},
child: Text(
'you',
style: TextStyle(
fontSize: 40,
height: 1.4,
fontWeight: FontWeight.bold,
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 6
..color = Colors.white),
),
)
參考
How to decorate text stroke in Flutter?
How to create gradient text in Flutter
到此這篇關(guān)于Flutters實現(xiàn)漸變色加描邊字體效果的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android優(yōu)化之啟動頁去黑屏實現(xiàn)秒啟動
本文的內(nèi)容主要是講Android啟動頁優(yōu)化,去黑屏實現(xiàn)秒啟動的功能,有需要的小伙伴們可以參考學(xué)習(xí)。2016-08-08
Android中監(jiān)聽軟鍵盤顯示狀態(tài)實現(xiàn)代碼
這篇文章主要介紹了Android中監(jiān)聽軟鍵盤顯示狀態(tài)實現(xiàn)代碼,本文直接給出核心實現(xiàn)代碼,需要的朋友可以參考下2015-04-04
完美解決EditText和ScrollView的滾動沖突(上)
這篇文章主要為大家詳細(xì)介紹了完美解決EditText和ScrollView滾動沖突的方法,感興趣的小伙伴們可以參考一下2016-06-06
Android PreferenceActivity與PreferenceFragment詳解及簡單實例
這篇文章主要介紹了Android PreferenceActivity與PreferenceFragment詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下2016-12-12

