开源计划之--Android绘图库--LogicCanvas

零、前言:

安卓图形绘制一直以来感觉都很繁琐 在html5时,我用JavaScript封装了一个HTML5的canvas库。 HTML5感觉和Android的canvas挺相似,所以考虑移植过来。 绘图库核心是用配置信息绘图,通过逻辑运算绘图 本篇会持续更新,记录LogicCanvas的成长历程

原理简单示意图:

绘制一个五角星的过程.png

引入
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
    
implementation 'com.github.toly1994328:logic-canvas-android:0.01'

一、以一个五角星来引入

在自定义View的onDraw方法中:绘制外接圆半径100,内接圆半径50,填充色黄色的5角星
ZCanvas zCanvas = new ZCanvas(canvas);
zCanvas.drawNStar(
    new Painter()
            .num(5)//角的个数,数字任意
            .R(100f)//外接圆半径
            .r(50f)////内接圆半径

五角星演示.png


二、公有属性演示:

所谓公有属性是指所有绘制图形适用的属性:包括 线条粗细(b)、线条颜色(ss)、填充颜色(ss)、 位移(p)、坐标系(coo)、旋转(rot)、缩放(sx,sy)屏幕适配dp单位(dp)

属性

默认值

简介

备注

p

Pos(0,0)

图形距画布左顶点偏移量

rot

0

旋转角度

弧度制

sx

0

x缩放

sy

0

y缩放

coo

Pos(0,0)

修改坐标系

平移、缩放、旋转使用

a

Pos(0,0)

修改锚点

b

1

线条粗

ss

"#000000"

线条样式

-

fs

"#0000ff"

填充样式

-

dp

-

dp单位

在链式末尾调用

1.位移:

p 参数类型:Pos 注:为了和数学更好契合,采用笛卡尔坐标系(上右正),默认屏幕左上角(0,0)点 为了明显,使用工具栏绘制网格参考

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .p(new Pos(200, -100)));//位移X,Y

位移p.png


2.坐标系:为了支持坐标系,可是煞费苦心啊!

coo 参数类型:Pos 为了明显,使用工具栏绘制坐标系参考 注意:使用坐标系后、平移、旋转、缩放都会根据新的坐标系来

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .coo(new Pos(600, 200))//设置坐标系
);

坐标系coo.png


3.描边颜色、粗细

ss 描边颜色 参数类型:int (颜色) b 描边粗细 参数类型:int

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .p(new Pos(200, -100))
        .ss(Color.RED)//描边颜色
        .b(5f)//描边线条粗细
);

描边,颜色.png


4.旋转:思考良久,单位还是采用:角度数吧

rot 旋转 参数类型:Float

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .ss(Color.RED)
        .coo(new Pos(600, 200))
        .rot(90f)//设置旋转
);

旋转.png

5.缩放:

sx、sy 缩放比例 参数类型:Float

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .ss(Color.RED)
        .coo(new Pos(600, 200))
        .sx(1.5f)
        .sy(1.5f)
);

缩放.png


6.锚点:

coo 参数类型:Pos

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .ss(Color.RED)
        .coo(new Pos(600, 200))
        .a(new Pos(100, 100))
        .sx(1.5f)
        .sy(1.5f)
);

修改参照点放大.png


7.填充

fs 描边颜色 参数类型:int (颜色)

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(100f)
        .r(50f)
        .coo(new Pos(600, 200))
        .fs(Color.YELLOW)
);

填充.png


8.dp单位适配

下面蓝色是没有适配的,黄色是适配的,蓝色在不同分辨率产生差异,黄色则正常显示

zCanvas.drawNStar(new Painter()
        .num(5)
        .R(20f)
        .r(10f)
        .fs(Color.YELLOW)
        .dp(mContext)
);

dp适配.png

公共属性展示到这里,持续更新,敬请关注 更新时间:2018-09-12:10:25 LogicCanvas-项目地址:github


二、直线绘制:

特有属性:ps 参数类型 不定个数的Pos。 再次强调:默认使用的是0,0为原点的笛卡尔坐标系

1.单线条
 zCanvas.drawLines(
         new Painter()
                 .b(5f)
                 .ps(new Pos(0, 0), new Pos(200, -200))
 );

绘制单直线.png


2.多线条
zCanvas.drawLines(
        new Painter()
                .b(5f)
                .ps(
                        new Pos(0, 0),
                        new Pos(200, -200),
                        new Pos(200,-400),
                        new Pos(200,-400),
                        new Pos(800,-400),
                        new Pos(0,0)
                )
);

绘制多线条.png


三、绘制矩形:

参数 : x 矩形宽 y:矩形高 r:矩形圆角

zCanvas.drawRect(
        new Painter()
                .x(1000/2f).y(618/2f).r(50f)
                .b(5f).ss(Color.RED).p(new Pos(100,-100))
);

绘制矩形.png


四、画圆:

dir true 逆时针方向绘制--默认 r 半径

zCanvas.drawCircle(
        new Painter()
                .r(100f)
                .b(5f).ss(Color.RED)
                .p(new Pos(200,-200))

画圆.png


五、绘制弧线
zCanvas.drawArc(
        new Painter()
                .r(100f).ang(135f)
                .b(1f).ss(Color.RED)
                .p(new Pos(200,-100))
);

绘制弧线.png


六、正多边形和正多角形
for (int i = 5; i < 10; i++) {
    zCanvas.drawRegularPolygon(
            new Painter()
                    .num(i).R(80f)
                    .b(4f)
                    .p(new Pos(20+210*(i-5),-20)));
    zCanvas.drawRegularStar(
            new Painter()
                    .num(i).R(80f)
                    .b(4f)
                    .p(new Pos(20+210*(i-5),-220)));
}

绘制正多边形和正多角星.png

多角星分析图

展示到这里,持续更新,更多功能敬请期待 更新时间:2018-09-12:13:25 LogicCanvas-项目地址:github


本文由张风捷特烈原创,转载请注明 更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 你的喜欢与支持将是我最大的动力

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cnblogs

深入理解和应用display属性(二)

四、inline-block 此类元素是inline + block的合体 1) margin和padding都有效;width和height都有效; .inl...

2186
来自专栏前端知识分享

第97天:CSS3渐变和过渡详解

渐变是CSS3当中比较丰富多彩的一个特性,通过渐变我们可以实现许多炫丽的效果,有效的减少图片的使用数量,并且具有很强的适应性和可扩展性。

1213
来自专栏HTML5学堂

CSS3渐变,就是这么玩

HTML5学堂(码匠):渐变背景是一直在页面中常见的元素之一,但是在之前所有的渐变背景都是通过设计师通过图形软件设计出来的背景图。其实这种方法比较麻烦,需要设计...

4105
来自专栏tkokof 的技术,小趣及杂念

HGE系列之九 管中窥豹(精灵动画)

这次的HGE之旅,让我们来看看精灵及动画的实现,毕竟对于一款2D游戏引擎来说,恐怕精灵和动画不是最重要的,也可算是最重要之一了吧:)

972
来自专栏知道一点点

CSS3 基础知识[转载minsong的博客]

CSS3 基础知识 1.边框     1.1 圆角  border-radius:5px 0 0 5px;     1.2 阴影  box-shadow:2px...

2536
来自专栏CodingBlock

Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas...

43112
来自专栏Android知识点总结

开源计划之--Android绘图库--LogicCanvas

在html5时,我用JavaScript封装了一个HTML5的canvas库。

3466
来自专栏Android常用基础

自定义View(一)-动画- XML生成View动画

感觉好久没有写博客了。首先因为最近比较忙,有在学习即时通讯相关的开源项目,好不容易忙完了。有点时间就抓紧写博客。之前学习的开源项目百篮应用已经获得360+sta...

1261
来自专栏糊一笑

深入常用CSS声明(一) —— Background

一直对一些自己常用的css声明掌握得不是很全,只知道常用的一些属性和值,但是对于其他的用法确实一知半解,这篇文章旨在扫盲,先不说有多深的理解,至少做到能够看到这...

4455
来自专栏HenCoder

Android 开发进阶: 自定义 View 1-1 绘制基础

从今天开始,HenCoder 就正式开讲知识技能了。按照我的计划,第一季是 UI,UI 一共分为三部分:绘制、布局和触摸反馈。本期是绘制部分的第一期。绘制大概会...

1352

扫码关注云+社区

领取腾讯云代金券