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

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

34资源网2022-06-16928

前言

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

实现思路

首先要实现但是渐变色边框,这个其实可以参考上一篇的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);
}

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

然后是让渐变色流动起来,这里就需要动画了,通过动画控制渐变填充的角度,周而复始就能够形成不断流动的效果。这里还是要用到 lineargradient 的transform 属性。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();
  }
  
  //...
}

实现的效果如下所示。

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

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

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

总结

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

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

版权声明:34楼发布

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

分享给朋友:

相关文章

现在开一家vr游戏体验馆投资创业要多少钱?

现在开一家vr游戏体验馆投资创业要多少钱?

现在开一家vr游戏体验馆投资创业要多少钱?这个涉及到的东西很多,比如你的店铺开在市区还是乡下,是开在热闹地方还是比较冷清的地方,另外还要看你的店面有多大,设备有多少台,以及其他的零零碎碎加起来,就能知道开一家vr游戏体验馆需要多少钱了。…

打工人是什么梗出自哪里?打工人的梗为什么这么火?

打工人是什么梗出自哪里?打工人的梗为什么这么火?

近日,看到打工人这词很火,很多小伙伴肯定和我一样,都想知道“打工人”这个词为什么这么火吧?那么,接下来我就跟大家说说打工人是什么梗出自哪里?这词出自哪里无从考证,不过肯定是某些有头脑的网友发明的,至于出自哪位网友?我们一起来了解相关情况吧。…

逍遥手机模拟器怎么用(逍遥安卓模拟器详细使用教程)

逍遥手机模拟器怎么用(逍遥安卓模拟器详细使用教程)

真正的5V5公平竞技对战,传承端游纯正体验。人气英雄,经典还原;公平竞技,实力至上;峡谷传说,掌心再现。策略、战术、意识、配合,在移动端重现峡谷战场乐趣。 为了庆祝大家期待已久的中国区开服,官方也带来了五大福利活动,用户可免费参与,并获得十…

这4类项目,投资人打死都不想投

这4类项目,投资人打死都不想投

很多创业者常感慨:明明自己的项目很好,但聊了很多投资人,却没人愿意投,这是为什么呢? 我们知道融资成功的关键,在于要让投资人看到项目的价值。这个价值,不仅仅是你的项目好就行,除了项目本身,投资人还有很多关注点,如果这些地方不“达标”,投资人…

融资丨「奕斯伟计算」完成25亿元C轮融资,目标物联网芯片领域全球领导者

融资丨「奕斯伟计算」完成25亿元C轮融资,目标物联网芯片领域全球领导者

创业邦获悉,12月1日,AIoT芯片与解决方案提供商北京奕斯伟计算技术有限公司(以下简称:奕斯伟计算)宣布完成25亿元人民币C轮融资,由金石投资和中国互联网投资基金联合领投,尚颀投资、国开科创、华新投资等跟投,老股东 IDG、君联资本、刘益…