- 在盯着gif看的某一瞬间,旋转方向突然就逆向旋转了
- 在旋转方向发送变化的同时,左腿变右腿,左手变右手
所以我在想,是不是看的时间久了,就可以任我切换旋转方向,于是盯了半个小时,结果是没成功,收获是方向切换的频次提高了。
我知道它肯定是向着一个方向旋转的,但到现在我依然不能理解为什么会是这样,困惑中。
那,是否能用canvas实现一个呢?
带来的困惑
苦苦思索:
- 这个人影是立体的,前面《太空人》 曾用到立体投影,这里估计要处理。
- 我该怎么画这个人儿呢? 用长方体拼凑怕是不合适吧。。。
- 这人儿的手臂还是伸开的。
- 在旋转的同时,看脚丫子,好像高低起伏。
第一版效果
- 先画左右腿
- 上下起伏
差距,有点远。。。
代码如下:
import ‘dart:ui’;
import ‘dart:math’;
import ‘package:flutter/material.dart’;
// 旋转小人儿
class RotateGirlMainPage extends StatefulWidget {
@override
_RotateGirlMainPageState createState() => _RotateGirlMainPageState();
}
class _RotateGirlMainPageState extends State
with SingleTickerProviderStateMixin {
AnimationController _controller;
@override
void initState() {
super.initState();
_controller = new AnimationController(
vsync: this, duration: const Duration(milliseconds: 1500));
_controller.repeat();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(“旋转小人儿”),
centerTitle: true,
),
body: CustomPaint(
size: MediaQuery.of(context).size,
painter: _MyPainter(_controller),
),
);
}
}
class _MyPainter extends CustomPainter {
AnimationController _controller;
_MyPainter(this._controller) : super(repaint: _controller);
@override
void paint(Canvas canvas, Size size) {
translateToCenter(canvas, size);
double dy = 10 * sin(pi * 2 * _controller.value);
Path path = new Path()
…moveTo(30 * sin(pi * 2 * _controller.value), dy)
…lineTo(100 * sin(pi * 2 * _controller.value), 220 + dy)
…moveTo(0, dy)
…lineTo(0, 200 + dy)
…lineTo(300, 200 + dy)
…lineTo(-300, 200 + dy);
Paint paint = new Paint()
…color = Colors.black
…style = PaintingStyle.stroke
…strokeWidth = 2
…isAntiAlias = true;
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
void translateToCenter(Canvas canvas, Size size) {
canvas.translate(size.width / 2, size.height / 2);
}
}
第二版效果
又仔细观察好像是斜对角的线,即
- 线的上端点,移动方向,左->右
- 线的下端点,移动方向,右->左
- 围绕着y轴旋转,y的坐标上下有波动,x的值通过radius_sin(pi_2*_controller.value)获取。(_controller是设定的一个动画,value取值范围在0-1,radius是旋转半径)
再看下效果:
是不是有那个味儿了。。。
最后,代码如下:
import ‘dart:ui’;
import ‘dart:math’;
import ‘package:flutter/material.dart’;
// 旋转小人儿
class RotateGirlMainPage extends StatefulWidget {
@override
_RotateGirlMainPageState createState() => _RotateGirlMainPageState();
}
class _RotateGirlMainPageState extends State
with SingleTickerProviderStateMixin {
AnimationController _controller;
@override
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/62cd398da5ede5064150b9c274c19682.jpeg)
最后
在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-0CI1sVBg-1712271978713)]