中文版介绍来自android-cjj同学
最近看了群里一个小伙伴wingjay的博文《有趣的曲线在Android上的实现》,文中又看到了一篇《简单法则的魅力》,然后得到了这样一段代码:
float aX,aY,bX,bY,angleA,angleB,speedA,speedB,aXR,aYR,bXR,bYR;
color c;
void setup(){
size(700,700);
background(0);
speedA = 0.025;
speedB = 0.006;
aXR = 320;
aYR = 320;
bXR = 320;
bYR = 80;
}
void draw(){
translate(width/2,height/2);
angleA += speedA;
angleB += speedB;
aX = cos(angleA) * aXR;
aY = sin(angleA) * aYR;
bX = cos(angleB) * bXR;
bY = sin(angleB) * bYR;
c = color(255,50);
stroke(c);
line(aX, aY, bX, bY);
}
void mousePressed(){
saveFrame(frameCount + " speedA-" + speedA + " speedB-" + speedB + " aXR-"+aXR + " aYR-"+aYR + " bXR-"+bXR + " bYR-"+bYR +".png");
}
一开始我也不信,因为我看了下代码,绘制只有这句 line(aX, aY, bX, bY);
,然后自己敲了一下,按自己的想法去自定义ArtLine了。
结果还真的挺神奇的,因此,我又改了参数,做多了几种效果,请看下图:
紫之花
青之草
黄之星
蓝之海
粉之晶
橙之橘
以上图文不符,请以代码为准!
上面的所有图形都是由同一段代码实现的,只有寥寥几行代码。其中的核心变量有 6 个。换句话说,只需修改 6 个参数就能衍生以上图形。 参数分别是:
- 点 A 的运动速率
- 点 A 在 x 轴的运动范围
- 点 A 在 y 轴的运动范围
- 点 B 的运动速率
- 点 B 在 x 轴的运动范围
- 点 B 在 y 轴的运动范围
我就开启了个动画,不断的绘画view自身,核心代码如下:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
angleA += speedA;
angleB += speedB;
aX = (float) (Math.cos(angleA) * aXR);
aY = (float) (Math.sin(angleA) * aYR);
bX = (float) (Math.cos(angleB) * bXR);
bY = (float) (Math.sin(angleB) * bYR);
listPos.add(aX);
listPos.add(aY);
listPos.add(bX);
listPos.add(bY);
canvas.translate(centerX, centerY);
canvas.drawColor(Color.BLACK);
canvas.save();
for (int i = 0; i < listPos.size(); i++) {
if (i % 4 == 0) {
canvas.drawLine(listPos.get(i), listPos.get(i + 1), listPos.get(i + 2), listPos.get(i + 3), paint);
}
}
canvas.restore();
}
好像挺简单的,就测试的时候麻烦点!源码已上传github ,你可以在这里找到wingjay!
这里打打个广告!最近发起了个 android sdk 源码解析——旨在帮助初学者更好的学习Android !高手请不要略过,仓库上还有很多Class没被认领分析,有兴趣的可以一起愉快搞基哦!虽然很多人说我瞎折腾,但是,还是有些人喜欢的! 另外,关于群里一言不合就开车事件
我们已经深深反省,决定深夜开车!
如果你喜欢这个东东的话,可以关注cjj github ,也可以关注微博Android_cJJ.
如果你对我的开源项目感兴趣,可以关注我: https://github.com/wingjay
微博: http://weibo.com/u/1625892654
随时可以通过这个邮箱找到我 mailto:[email protected]
谢谢!