开源计划之--Android绘图库--LogicCanvas
零、前言:
安卓图形绘制一直以来感觉都很繁琐
在html5时,我用JavaScript封装了一个HTML5的canvas库。
HTML5感觉和Android的canvas挺相似,所以考虑移植过来。
绘图库核心是用配置信息绘图,通过逻辑运算绘图
本篇会持续更新,记录LogicCanvas的成长历程
原理简单示意图:
引入
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)////内接圆半径
二、公有属性演示:
所谓公有属性是指所有绘制图形适用的属性:包括
线条粗细(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
2.坐标系:为了支持坐标系,可是煞费苦心啊!
coo 参数类型:Pos
为了明显,使用工具栏绘制坐标系参考
注意:使用坐标系后、平移、旋转、缩放都会根据新的坐标系来
zCanvas.drawNStar(new Painter() .num(5) .R(100f) .r(50f) .coo(new Pos(600, 200))//设置坐标系 );
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)//描边线条粗细 );
4.旋转:思考良久,单位还是采用:角度数吧
rot 旋转 参数类型:Float
zCanvas.drawNStar(new Painter() .num(5) .R(100f) .r(50f) .ss(Color.RED) .coo(new Pos(600, 200)) .rot(90f)//设置旋转 );
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) );
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) );
7.填充
fs 描边颜色 参数类型:int (颜色)
zCanvas.drawNStar(new Painter() .num(5) .R(100f) .r(50f) .coo(new Pos(600, 200)) .fs(Color.YELLOW) );
8.dp单位适配
下面蓝色是没有适配的,黄色是适配的,蓝色在不同分辨率产生差异,黄色则正常显示
zCanvas.drawNStar(new Painter() .num(5) .R(20f) .r(10f) .fs(Color.YELLOW) .dp(mContext) );
公共属性展示到这里,持续更新,敬请关注
更新时间: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)) );
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) ) );
三、绘制矩形:
参数 : 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)) );
四、画圆:
dir true 逆时针方向绘制--默认
r 半径
zCanvas.drawCircle( new Painter() .r(100f) .b(5f).ss(Color.RED) .p(new Pos(200,-200))
五、绘制弧线
zCanvas.drawArc( new Painter() .r(100f).ang(135f) .b(1f).ss(Color.RED) .p(new Pos(200,-100)) );
六、正多边形和正多角形
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))); }
展示到这里,持续更新,更多功能敬请期待
更新时间:2018-09-12:13:25
LogicCanvas-项目地址:github
本文由张风捷特烈原创,转载请注明
更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
你的喜欢与支持将是我最大的动力
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android面试题库 - Activity(一) - 基础
Activity生命周期 什么是Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 Activity的4种状态 名称 解释 running Activity处于前台,与用户有交互的情况下,此时Activity不会被回收 paused Activity被一个透明的Activity遮罩住,此时处于paused状态,如果内存紧张,会被回收 stopped Activity被另外一个Activity完全覆盖,就会处于stopped状态,内存紧张的情况下会被虚拟机回收 killed Activity已经被系统回收了 Activity的生命周期 Activty的生命周期 Activity生命周期详解 Activity的四种启动场景 Activity 启动:Activity启动 -> onCreate ->onStart->onResume 返回桌面:onPause->onStop 桌面重新打开:onRestart->onStart->onResume 退出Activity :onPuase-&...
- 下一篇
android view 转Bitmap 生成截图
文章链接:https://mp.weixin.qq.com/s/FQmYfT-KYiDbp-0HzK_Hpw 项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap 再到图片分享,还有一种情况是将不可见的view 转成bitmap ,这种view是没有直接显示在界面上的,需要我们使用inflate 进行创建的view。 第一种 先看通过 DrawingCache 方法来截取普通的view,获取它的视图(Bitmap)。 private Bitmap createBitmap(View view) { view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; } 这个方法适用于view 已经显示在界面上了,可以获得view 的宽高实际大小,进而通过DrawingCache 保存为bitmap。 第二种 但是 如果要截取的view 没有在屏幕上显示完全的,例如要截取的是超过一屏的 scrollview ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作