Android实现流动的渐变色边框效果
目录
- 前言
- 实现思路
- 总结
前言 记得在介绍 motion_toast 一篇的时候,开篇有一张动图,边框是渐变色而且感觉是流动的。这个动效挺有趣的,当时也有人问怎么实现,经过上一篇《让你的聊天气泡丰富多彩!》后,有了实现思路了。
文章图片
实现思路 【Android实现流动的渐变色边框效果】首先要实现但是渐变色边框,这个其实可以参考上一篇的
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 Statewith SingleTickerProviderStateMixin {late Animation animation; late AnimationController controller; @overridevoid initState() {super.initState(); controller =AnimationController(duration: const Duration(seconds: 2), vsync: this); animation = Tween (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渐变色边框内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- mysql|SpringBoot + MyBatis + MySQL 实现读写分离
- python打包flask|python打包flask 项目_手把手教你将Flask应用封装成Docker服务的实现
- SqlServer入门到精通|SQL实现将数据表中的字段中的值按分隔符分成多列
- vue3.x使用swiper实现卡片轮播
- js实现图片查看器
- vue使用Office|vue使用Office Web实现线上文件预览
- vue实现移动端touch拖拽排序
- Vue实现可复用轮播组件的方法
- Java实现Map遍历key-value的四种方法
- SpringBoot|SpringBoot 热搜与不雅文字过滤的实现