您好,登錄后才能下訂單哦!
這篇文章主要介紹了Android怎么用ShaderMask實現花里胡哨的文字特效的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Android怎么用ShaderMask實現花里胡哨的文字特效文章都會有所收獲,下面我們一起來看看吧。
ShaderMask
的構造函數定義如下。
const ShaderMask({ Key? key, required this.shaderCallback, this.blendMode = BlendMode.modulate, Widget? child, })
其中關鍵的參數是 shaderCallback
回調方法,通過 回調方法可以構建一個著色器來為子組件著色,典型的做法是使用 Gradient
的子類(如 LinearGradient
和 RadialGradial
)來創建著色器。blendMode
參數則用于設置著色的方式。 因此,我們可以利用LinearGradient
來實現漸變色文字,示例代碼如下,其中 blendMode
選擇為 BlendMode.srcIn
是忽略子組件原有的顏色,使用著色器來對子組件著色。
ShaderMask( shaderCallback: (rect) { return LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [ Colors.blue, Colors.green[300]!, Colors.orange[400]!, Colors.red, ], ).createShader(rect); }, blendMode: BlendMode.srcIn, child: const Text( '島上碼農', style: TextStyle( fontSize: 36.0, fontWeight: FontWeight.bold, ), ), ),
實現效果如下圖。
實際上,不僅僅能夠對文字著色,還可以對圖片著色,比如我們使用一個 Row
組件在文字前面增加一個Image
組件,可以實現下面的效果。
靜態的漸變色著色還不夠,Gradient
還有個 transform
來實現三維空間變換的漸變效果,我們可以利用這個參數和動畫組件實現動畫效果,比如下面這樣。
這里其實就是使用了動畫控制 transform
實現橫向平移。由于 transform
是一個 GradientTransform
類,實現這樣的效果需要定義一個GradientTransform
子類,如下所示。
@immutable class SweepTransform extends GradientTransform { const SweepTransform(this.dx, this.dy); final double dx; final double dy; @override Matrix4 transform(Rect bounds, {TextDirection? textDirection}) { return Matrix4.identity()..translate(dx, dy); } @override bool operator ==(Object other) { if (identical(this, other)) { return true; } if (other.runtimeType != runtimeType) { return false; } return other is SweepTransform && other.dx == dx && other.dy == dy; } @override int get hashCode => dx.hashCode & dy.hashCode; }
然后通過 Animation
動畫對象的值控制漸變色平移的距離就可以實現漸變色橫向掃過的效果了,代碼如下所示。
ShaderMask( shaderCallback: (rect) { return LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [ Colors.blue, Colors.green[300]!, Colors.orange[400]!, Colors.red, ], transform: SweepTransform( (_animation.value - 0.5) * rect.width, 0.0), ).createShader(rect); }, blendMode: BlendMode.srcIn, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'images/logo.png', scale: 2, ), const Text( '島上碼農', style: TextStyle( fontSize: 36.0, fontWeight: FontWeight.bold, ), ), ], ), ),
除了使用漸變色之外,我們還可以利用 ImageShader 使用圖片填充文字,實現一些其他的文字特效,比如用火焰圖片作為背景,讓文字看起來像燃燒了一樣。
實現的代碼如下,其中動效是通過 ImageShader
的構造函數的第4個參數的矩陣matrix4運算實現的,相當于是讓填充圖片移動來實現火焰往上升的效果。
ShaderMask( shaderCallback: (rect) { return ImageShader( fillImage, TileMode.decal, TileMode.decal, (Matrix4.identity() ..translate(-20.0 * _animation.value, -150.0 * _animation.value)) .storage); }, blendMode: BlendMode.srcIn, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'images/logo.png', scale: 2, ), const Text( '島上碼農', style: TextStyle( fontSize: 36.0, fontWeight: FontWeight.bold, ), ), ], ), )
關于“Android怎么用ShaderMask實現花里胡哨的文字特效”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Android怎么用ShaderMask實現花里胡哨的文字特效”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。