91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么用ShaderMask實現花里胡哨的文字特效

發布時間:2022-12-05 09:13:36 來源:億速云 閱讀:118 作者:iii 欄目:開發技術

這篇文章主要介紹了Android怎么用ShaderMask實現花里胡哨的文字特效的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Android怎么用ShaderMask實現花里胡哨的文字特效文章都會有所收獲,下面我們一起來看看吧。

ShaderMask 實現漸變色文字

ShaderMask 的構造函數定義如下。

const ShaderMask({
  Key? key,
  required this.shaderCallback,
  this.blendMode = BlendMode.modulate,
  Widget? child,
})

其中關鍵的參數是 shaderCallback回調方法,通過 回調方法可以構建一個著色器來為子組件著色,典型的做法是使用 Gradient 的子類(如 LinearGradientRadialGradial)來創建著色器。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,
    ),
  ),
),

實現效果如下圖。

Android怎么用ShaderMask實現花里胡哨的文字特效

實際上,不僅僅能夠對文字著色,還可以對圖片著色,比如我們使用一個 Row 組件在文字前面增加一個Image 組件,可以實現下面的效果。

Android怎么用ShaderMask實現花里胡哨的文字特效

讓漸變色動起來

靜態的漸變色著色還不夠,Gradient 還有個 transform 來實現三維空間變換的漸變效果,我們可以利用這個參數和動畫組件實現動畫效果,比如下面這樣。

Android怎么用ShaderMask實現花里胡哨的文字特效

這里其實就是使用了動畫控制 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 使用圖片填充文字,實現一些其他的文字特效,比如用火焰圖片作為背景,讓文字看起來像燃燒了一樣。

Android怎么用ShaderMask實現花里胡哨的文字特效

實現的代碼如下,其中動效是通過 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實現花里胡哨的文字特效”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卢湾区| 曲周县| 富民县| 巴林右旗| 宜都市| 滨海县| 富裕县| 贵定县| 沈阳市| 远安县| 南投县| 罗山县| 聂拉木县| 五河县| 修水县| 永昌县| 江川县| 兴海县| 民勤县| 西乡县| 竹北市| 灵丘县| 沙湾县| 雅江县| 宜都市| 乐安县| 桃园市| 旺苍县| 福建省| 莫力| 当阳市| 涿鹿县| 聂拉木县| 新余市| 融水| 宁海县| 田阳县| 诏安县| 镇原县| 陈巴尔虎旗| 全州县|