最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Flutter 中漸變的高級用法(3種)

 更新時間:2020年07月06日 09:56:23   作者:老孟  
這篇文章主要介紹了淺談Flutter 中漸變的高級用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Flutter 中漸變有三種:

  • LinearGradient:線性漸變
  •  RadialGradient:放射狀漸變
  • SweepGradient:扇形漸變

看下原圖,下面的漸變都是在此圖基礎上完成。

LinearGradient

給一張圖片添加從上到下的線性漸變:

ShaderMask(
 shaderCallback: (Rect bounds) {
  return LinearGradient(
   begin: Alignment.topCenter,
   end: Alignment.bottomCenter,
   colors: [Colors.red,Colors.blue,Colors.green],
  ).createShader(bounds);
 },
 blendMode: BlendMode.color,
 child: Image.asset(
  'assets/images/b.jpg',
  fit: BoxFit.cover,
 ),
)

beginend 表示漸變的方向,上面設置的方向是從頂部中間到底部中間。

color 表示漸變的顏色。

設置各個漸變色的結束點:

Color color = Colors.orange;
return ShaderMask(
 shaderCallback: (Rect bounds) {
  return LinearGradient(
    begin: Alignment.topCenter,
    end: Alignment.bottomCenter,
    colors: [color,color,Colors.transparent,Colors.transparent,color,color],
    stops: [0,.4,.41,.6,.61,1]
  ).createShader(bounds);
 },
 blendMode: BlendMode.color,
 child: Image.asset(
  'assets/images/b.jpg',
  fit: BoxFit.cover,
 ),
);

stops 的個數(shù)要對應 color

由于中間設置的漸變色為透明,所以中間是原圖。

RadialGradient

RadialGradient 是放射狀漸變。

ShaderMask(
   shaderCallback: (Rect bounds) {
    return RadialGradient(
     radius: .5,
     colors: <Color>[Colors.red, Colors.blue],
    ).createShader(bounds);
   },
   blendMode: BlendMode.color,
   child: Image.asset(
    'assets/images/b.jpg',
    fit: BoxFit.cover,
   ),
  )

實現(xiàn)中間顯示圓形原圖,其他地方有灰色蒙板:

ShaderMask(
 shaderCallback: (Rect bounds) {
  return RadialGradient(
   radius: .6,
   colors: <Color>[
    Colors.transparent,
    Colors.transparent,
    Colors.grey.withOpacity(.7),
    Colors.grey.withOpacity(.7)
   ],
   stops: [0, .5, .5, 1],
  ).createShader(bounds);
 },
 blendMode: BlendMode.srcATop,
 child: Image.asset(
  'assets/images/b.jpg',
  fit: BoxFit.cover,
 ),
)

SweepGradient

SweepGradient 扇形漸變效果。

ShaderMask(
 shaderCallback: (Rect bounds) {
  return SweepGradient(
   colors: <Color>[
    Colors.red,
    Colors.blue
   ],
  ).createShader(bounds);
 },
 child: Image.asset(
  'assets/images/b.jpg',
  fit: BoxFit.cover,
 ),
)

startAngleendAngle 表示開始和結束角度。

繪制漸變圓環(huán):

Container(
    width: 200,
    height: 200,
    child: CustomPaint(
     painter: _CircleProgressPaint(.5),
    ),
   )

class _CircleProgressPaint extends CustomPainter {
 final double progress;

 _CircleProgressPaint(this.progress);

 Paint _paint = Paint()
  ..style = PaintingStyle.stroke
  ..strokeWidth = 20;

 @override
 void paint(Canvas canvas, Size size) {
  _paint.shader = ui.Gradient.sweep(
    Offset(size.width / 2, size.height / 2), [Colors.red, Colors.yellow]);
  canvas.drawArc(
    Rect.fromLTWH(0, 0, size.width, size.height), 0, pi*2, false, _paint);
 }

 @override
 bool shouldRepaint(CustomPainter oldDelegate) {
  return true;
 }
}

除了圖片,可以給任何組件加入漸變效果,比如文字:

ShaderMask(
 shaderCallback: (Rect bounds) {
  return LinearGradient(
   colors: <Color>[Colors.blue, Colors.red],
   tileMode: TileMode.mirror,
  ).createShader(bounds);
 },
 blendMode: BlendMode.srcATop,
 child: Center(
  child: Text(
   '老孟,一枚有態(tài)度的程序員',
   style: TextStyle(fontSize: 24),
  ),
 ),
)

到此這篇關于淺談Flutter 中漸變的高級用法(3種)的文章就介紹到這了,更多相關Flutter 漸變內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

珲春市| 晋江市| 丰原市| 海南省| 汝城县| 衡阳县| 神农架林区| 栖霞市| 海安县| 西安市| 北碚区| 百色市| 大方县| 东阿县| 繁峙县| 南召县| 新河县| 乐平市| 金沙县| 张北县| 会昌县| 双峰县| 吉隆县| 锡林郭勒盟| 佛学| 兴业县| 黔西| 台东县| 嘉荫县| 乌兰浩特市| 高州市| 巩义市| 介休市| 呼图壁县| 汽车| 门源| 彰武县| 彩票| 道孚县| 苍山县| 萨迦县|