Android 自定义贝塞尔曲线工具
Android 自定义贝塞尔曲线工具
之前在学习贝塞尔曲线的相关内容,在查找相关资料的时候发现网上的资料重复的太多了,而且因为android的canvas只提供了quadTo,cubicTo两种方法来绘制二阶和三阶的贝塞尔曲线.在线的贝塞尔曲线绘制网站也很少,(在这提供一个在线贝塞尔曲线的网站,根据网上的资料整理的),而在android手机中缺没有类似的工具,在设计或者使用贝塞尔曲线的时候增加了很多的工作,刚好在学习相关的知识,就做了一个较为完善的android端的贝塞尔曲线工具.
贝塞尔曲线基本的贝塞尔曲线的知识就不多说了,有兴趣的可以参考下我之后会完成的贝塞尔曲线的记录
其实理解贝塞尔曲线十分容易,可以将其理解为一种递归的形式.根据比例系数计算当前线段中的点,得到所有点之后再按照顺序连接线段,重复以上步骤,直至只剩下一个点,此点就在贝塞尔曲线中,计算各个比例系数下的点,这些点的集合就是贝塞尔曲线.
基本功能绘制常见的贝塞尔曲线可以绘制常见的二阶,三阶贝塞尔曲线
绘制多阶的贝塞尔曲线可以绘制不常见的贝塞尔曲线
开启/关闭辅助线可以开启不同颜色层级的辅助线段
绘制无上限制的 ...
Android杂食店-一次自定义动画的实现
半年更系列
之前写过不少自定义View及Canvas绘制的文章, 不过都是怎么做, 没有写明为什么要这么做. 刚好这次有了一个比较简单经典的动画, 记录下完成的过去, 希望可以起到一个抛转引玉的效果.
最终效果
可以看到这个效果还是比较简单的, 是一个模拟日光晃动的效果, 一般出现与和天气有关的场景中.
设计思路设计思路和大家都一样:
分解静态动画
实现静态动画
实现动态动画
关于动画如何动起来. 我一般习惯于先将静态的动画完成, 再重新考虑如何动起来, 虽然看起来影响到之前已经完成的代码. 不过相较于在动态静态一并完成, 这样分开考虑更加的简单. 而且针对与自定义动画的实现来说, 代码量还没有大到无法二次开发的程度.
分解静态动画简单来说就是将动画分解为一个个最基础的效果, 毕竟代码还是要讲规则的.
需要注意的是, 有的动画在前后的变化过程中, 出现的元素时不一样的.这都是需要一个一个进行分解的. 在这个过程中, 也不能完全规避动态的部分.
简单来说, 如果你的动画中有一个圆, 你可以把它看成一个圆, 也可以把它看成两个半圆拼接而成. 如果动画流程中, 它一直都是一个圆 ...
Procedural Dungeon Generation Algorithm - 地牢程序生成算法
本文经@a327ex授权翻译与转载, 原文链接1: GitHub,原文链接2: gamedeveloper
这篇文章阐释了一种生成随机地牢的技术,该技术首先由TinyKeepDev在此描述.我将比原始帖子中的步骤更详细地介绍它.此算法的实现流程如下:
生成房间首先, 你需要在一个圆内生成随机的生成一些具有一定宽度和高度的房间.TKdev的算法通过正太分布来控制房间的大小, 我认为这是一个好主意, 因为它可以通过更多参数来进行控制.通过控制宽高比和标准方差可以生成外观不同的地牢.
一个你可能需要的方法getRandomPointInCircle
1234567function getRandomPointInCircle(radius) local t = 2*math.pi*math.random() local u = math.random()+math.random() local r = nil if u > 1 then r = 2-u else r = u end return radius*r*math.cos(t), radius*r*math.s ...
Android杂食店-一次MpAndroidChart美化过程
半年更系列回来了
MpAndroidChart的真好用
效果比较完全使用默认的配置进行展示,
默认效果
折线优化
四周优化
覆盖物优化
UI设计:源链接
可以看到相比于完全没有优化, 效果差的不是一点点
优化思路这里主要是ui优化, 除开整体元素设计来说, 页面风格适配就可以了. 不过我们可以将ui优化分为以下几个方向
上下这里需要一个下方的过渡效果即可
左右看起来没有需要优化的部分
中我们的折线图本体, 也是我们优化的重点
四周优化就如在优化思路中所说, ui优化需要适配这个页面的风格, 这里的四周(尤其是底部), 都是服务与想要表达的主体(折线图的), 实现起来页相对荣幸, 不需要考虑重叠动态计算相关位置的问题, 使用一个合适渐变就可以了.
折线图优化接下来是我们优化的重点部分, 也是我们页面信息显示的主题, 折线图.
Y轴从效果看来, Y轴对我们来说是一个多余的元素, 我们将其移除即可, 不过为了整体的效果, 还是需要进行一个相关的设置.
12345678YAxis yAxis = binding.lcReportInfo.getAxisLef ...
Remix教程(一)-Developer Blog(译)
最近又看到了一个前端项目Remix.run, 用起来感觉十分的舒服, 不过在使用的时候想查找一些资料却发现其在国内的资料寥寥无几, 也不成体系. 故考虑根据官方的教程进行初步的译制. 如发现任何问题, 欢迎沟通原文连接:https://remix.run/docs/en/v1/tutorials/blog相关其它Remix内容会继续跟进
Quickstart在这里, 我们将用简短的文件和代码进行介绍, 如果你想用15分钟了解Remix的全部内容, 这里是个不错的地方
💿 Hey I’m Derrick the Remix Compact Disc 👋 每当你应该做一些事情的时候, 你就会看到我
在这里我们使用了TypeScript, 但我们总是在完成了一些代码之后才确认方法.这不是我们的正常工作流程.为了不搞乱你们当中没有使用TypeScript那些人的代码.在开始的时候就确认了我们需要使用的代码(measure twice, cut once!)
创建项目💿 初始化一个新的Remix项目[^1]
1234npx create-remix@latest# 选择 Remix ...
hexo中butterfly主题busuanzi计数手动初始化
最近又又又又换博客的地址了, 主要是发现了新的好用的工具Vercel, 又更新了一些相关内容, 刚好又遇到了一些问题
问题博客还是使用hexo进行搭建, 这次没有继续使用next的主题, 而是用来butterfly, 在进行busuanzi网站访客数量的统计的时候又发现了之前的问题, busuanzi没有初始化的功能(好像好几年了已经), 之前使用next的时候是使用的swig进行配置, 不过找到了相关的文章进行了修改, 一直使用到了现在, 所以同样的问题又出现了
:+1:不想看解决的过程, 直接看解决方法
解决过程首先是在butterfly的github的进行了沟通, 虽然没有具体的解决思路, 不过也得到了思路
其实这个问题并不困难, 思路也比较简单, 获取到当前的计数, 加上初始化的数量可以
解决方法先修改_config.yml下的busuanzi配置
123456789# busuanzi count for PV / UV in site# 訪問人數busuanzi:site_uv: truesite_pv: truepage_pv: true# 新增以下的配置init ...
每周一个自定义View-2-动态ProgressViewTip2
每周一个自定义View-2-动态ProgressViewTip2
其实功能周一就已经实现了, 不过后面的内容感觉比功能的实现还繁琐
照理先看下效果, 这里可以看到, 随着进度的变化越快, tip偏移的角度也越大, 给人一种加速度高的感觉
设计过程静态分解这个view整体看来还是比较简单的, 可以分成背景和文字的展示
背景的话可以看做一个圆角矩形和一个等边三角形, 显示的文字的话只要让文字在矩形的中心显示就可以了
动画效果动画效果也比较简单, 根据当前需要变化的进度按照比例来旋转整体的角度即可
代码实现代码相对来说还是比较简单的, 就不分模块展示了
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273@Override protected void onDraw(Canvas canvas) { //绘制区域下移, 避免顶部动画时 ...
Android杂货店-一次自动化测试的记录
Android杂货店-一次自动化测试的记录
是的, 每周一个自定义View的系列第二周就咕咕咕了, 因为我平时使用的工具各种各样, 实在是没有什么办法归为一类来处理, 现在想想, 这里平时实际工作使用的工具反而是更应该分享给大家的, 于是便有了现在新的系列Android杂货店, 多吃才能更好学习不是.
背景最近一直在做一个蓝牙通信的项目, 由于通信的情况不是很稳定, 就像做一个冒烟测试看一下具体的情况, 不过现场十分的复杂, 需要延时通信, 异步的获取结果, 在根据结果决定相关的操作, 既不是白盒也不是黑盒. 因为是针对开发功能的测试, 纯黑盒的情况下无法获取到一些检测的数据, 而纯白盒的情况下又有许多的功能以及被集成, 只不过没有数据的显示. 加之功能测试流程复杂, 重复性高, 最后通过adb和shell进行了测试
设计与实现测试的设计来说还是比较简单的, 打开应用-> 检查状态 -> 测试功能1 -> 测试功能2 -> 退出应用 -> 统计信息 -> 下一次循环测试
不过现实起来还是比较麻烦, 既有log日志的信息截取, 还有页面点击的事件 ...
每周一个自定义View(1) -动态ProgressView
每周一个自定义View(1) -动态ProgressView
新的一个系列, 应该是计划每周实现一个自定义View, 看看能检查到多久吧
这次就从一个常见的ProgressBark开始吧, 最近的项目中使用了一个Progress显示文件下载进度的功能, 设计给的是一个静态的图片, 也没有说需要具体实现的情况, 后面优化的时候刚好有了性质, 就有了下面的这个AnimatorProgressBar.
效果展示
支持功能
基本的的进度设置(当前默认为0-100)
颜色定义, 使用的颜色都是可以设置的, 满足各样的ui需求
元素定义, 作为展示的Progress中的线条可以设置宽度和间距
动画控制, 动画效果可以设置展示速度, 总有一个组合适合你
设计过程
将相关的view分为了四层, 从下至上分别为
背景图层用于显示整个view的背景
进度图层相当于进度条的背景颜色
线段动画图层在这里绘制出现的线段, 并控制器动画的效果
遮罩展示图层这里使用了遮罩展示的方法, 控制遮罩图层的进度和样式来表现实际的展示效果
实现过程 首先是背景如果绘制的, 简单来说就是两个圆形和一个矩形, ...
RobinAlgo - 可视化算法学习平台 正式上线了
RobinAlgo - 可视化算法学习平台 正式上线了
!!! RobinAlgo - 可视化算法学习平台 正式上线了 !!!!!! RobinAlgo - 可视化算法学习平台 正式上线了 !!!!!! RobinAlgo - 可视化算法学习平台 正式上线了 !!!重要的事情要说三遍.
0. RobinAlgo是什么?->插入视频<-
RobinAlgo通过简单的视频大家应该对RobinAlgo有一点点的了解了, 正如视频的介绍中, RobinAlgo是一个算法学习的平台, 通过RobinAlgo可以帮助你提供你的算法能力.
RobinAlgo的优势
动画展示 每道题目都有针对当前题目而原创制作的动画, 通过可视化的动画帮助大家理解题解和算法的运行过程, 是帮助你高效学习的不二神器
手绘讲解视频 题目讲解的过程中根据思路实时绘制, 方便同步讲解的思路, 更快的理解算法内容
代码详解 每行代码都提供完整的代码, 更快的理解代码的实现
视频精简 不同于许多时长半小时起步的视频, 在视频后期制作中不断的调整内容, 保证每期视频时长都在十分钟左右, 精简但不简单, 视频的每分 ...