当前位置:首页 > 谈天说地

Android实现流动的渐变色边框效果

34资源网2022-06-16854

前言

记得在介绍 一篇的时候,开篇有一张动图,边框是渐变色而且感觉是流动的。这个动效挺有趣的,当时也有人问怎么实现,经过上一篇后,有了实现思路了。

实现思路

首先要实现但是渐变色边框,这个其实可以参考上一篇的custompaint 的渐变填充实现。绘制一个矩形边框,然后让渐变色的区域填充到矩形区域内就可以了。

void paint(canvas canvas, size size) {
  final rectwidth = 300.0, rectheight = 100.0;
  rect rect = offset(
          size.width / 2 - rectwidth / 2, size.height / 2 - rectheight / 2) &
      size(rectwidth, rectheight);
  final paint = paint()
    ..shader = lineargradient(
      begin: alignment.topleft,
      end: alignment.bottomright,
      colors: colors,
      ),
    ).createshader(rect)
    ..style = paintingstyle.stroke
    ..strokewidth = 8.0;
  canvas.drawrect(rect, paint);
}

绘制出来的效果如下图所示。

然后是让渐变色流动起来,这里就需要动画了,通过动画控制渐变填充的角度,周而复始就能够形成不断流动的效果。这里还是要用到 lineargradienttransform 属性。flutter 内置了一个gradientrotation旋转变换的类,正好可以进行角度变换实现角度控制,gradientrotation 接收一个角度值实现对渐变的角度控制,下面是0度和90度的对比图,可以看到0度到90度边框的渐变色起始位置正好是旋转了90度。

有了以上两个基础,我们通过一个 animation 对象动画过程中的值来控制旋转角度就可以了。

void paint(canvas canvas, size size) {
  final rectwidth = 300.0, rectheight = 100.0;
  rect rect = offset(
          size.width / 2 - rectwidth / 2, size.height / 2 - rectheight / 2) &
      size(rectwidth, rectheight);
  final paint = paint()
    ..shader = lineargradient(
      begin: alignment.topcenter,
      end: alignment.bottomcenter,
      colors: colors,
      transform: gradientrotation(
        animation * 2 * pi,
      ), //改变 transform 值实现渐变旋转效果
    ).createshader(rect)
    ..style = paintingstyle.stroke
    ..strokewidth = 8.0;
  canvas.drawrect(rect, paint);
}

动画配置代码如下,2秒旋转一周,使用 curves.linear 实现匀速旋转。

class _gradientbounddemostate extends state<gradientbounddemo>
    with singletickerproviderstatemixin {
  late animation<double> animation;
  late animationcontroller controller;

  @override
  void initstate() {
    super.initstate();
    controller =
        animationcontroller(duration: const duration(seconds: 2), vsync: this);
    animation = tween<double>(begin: 0, end: 1.0).animate(curvedanimation(
      parent: controller,
      curve: curves.linear,
    ))
      ..addlistener(() {
        setstate(() {});
      });
    controller.repeat();
  }
  
  //...
}

实现的效果如下所示。

调整一下颜色和 lineargradientbeginend 参数,还可以实现一些有趣的效果。下面这个效果就和开篇那个效果有点接近了。

如果是画成圆圈边框的话,做 loading 效果其实也不错。

源码已经提交至:绘图相关源码,文件名为:gradient_bound_demo.dart

总结

本篇介绍了自定义绘制渐变色边框,并通过动画实现流动的效果,绘图加动画组合能够实现很多既有创意又有取的效果,大家也可以尝试一下看看有哪些有趣的玩法。

到此这篇关于android实现流动的渐变色边框效果的文章就介绍到这了,更多相关android渐变色边框内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/17550.html

分享给朋友:

相关文章

分享10句用哀鸿遍野造句大全

分享10句用哀鸿遍野造句大全

1、在旧社会,每逢水旱战乱,人民就被迫四处逃亡,哀鸿遍野,一片凄凉。…

天上的孩子电影好看吗?看豆瓣网友如何评价的吧

天上的孩子电影好看吗?看豆瓣网友如何评价的吧

由胡玫监制许磊导演编剧的电影《天上的孩子》。电影主要讲述了来自贵州的夫妻老何、玲霞5岁的独子查出绝症,不久于人世。为了让儿子的名字刻在纪念碑上,夫妻俩决定捐献儿子的器官却困难重重。…

视频号入口在哪里(视频号直播入口新手手册)

视频号入口在哪里(视频号直播入口新手手册)

视频号助手在哪里?视频号助手什么时候上线?微信视频号助手正式上线目前微信视频号助手已经开始内测使用了,大家可以直接在PC端扫码登录,管理自己的视频号,可以看到自己的各项动态数据,非常方便管理。 视频号助手在哪里 视频号助手在哪里? 手机微…

华为小米革了康佳长虹们的命,海信怎么办?

华为小米革了康佳长虹们的命,海信怎么办?

编者按:本文来自陆玖财经,创业邦经授权发布。 电视行业真正需要面对的不是“大屏好还是小屏好”,用激光、OLED还是Mini LED之类的技术路线之争,而是一旦被视为“智能终端”,从产品形态到竞争模式的翻天覆地。 近日,海信子品牌Vidda…

豆瓣直播,谁会买单?

豆瓣直播,谁会买单?

图源:摄图网 编者按:本文来自微信公众号连线Insight(ID:lxinsight),作者:张霏,编辑:李信,创业邦经授权转载 被外界视为低调的豆瓣从不缺关注。 昨晚,#豆瓣已暂停小组回复功能#和#国家网信办依法约谈处罚豆瓣网#双双冲上…

视频号灰度测试购物车功能,微信要扛起腾讯电商大旗了?

视频号灰度测试购物车功能,微信要扛起腾讯电商大旗了?

图源:摄图网 编者按:本文来自微信公众号小谦笔记(ID:xiaoqianshuo),创业邦经授权转载 据自媒体百准报道,除了直播,微信视频号目前正在灰度测试短视频购物车功能,这被视为微信加码电商业务的一大跨步。 早在2014年,腾讯就在微信…