一、前言

前段时间被“啥是佩奇”短片感动了一把,在网络上也掀起了一阵热潮,老爷子用自己的焊铁技术为孩子打造了别样的佩奇,今天用我那浅薄的知识打造Android佩奇。

二、思路:

1、将佩奇分为鼻子,眼睛,嘴巴等相应的部位;
2、根据各个部位判断使用贝塞尔曲线还是运用canvas直接绘制图形。因为后面需要实现绘制的动态效果,则这里绘制图形时使用path绘制。
3、使用贝塞尔曲线绘制佩奇整个身体,耳朵和嘴巴,确定曲线的开始点和控制点;
4、使用PathMeasure的getLength,getSegment等方法实现每个部位的动态绘制。

三、知识点PathMeasure

  • PathMeasure(Path path,boolean forceClosed):表示创建与指定路径对象(已创建和指定)关联的PathMeasure对象。

参数
path:已绘制路径;
forceClosed:如果为true,表示路径为闭合状态,即使路径未明确关闭,路径也将被视为“已关闭”。
方法
getLength():获取path的总长度,如果没有路径就返回0;
getSegment(float startD, float stopD,Path dst,boolean startWithMoveTo):**传入起始位置startD和结束位置stopD,在dst中返回startD和stopD中间的路径。如果startWithMoveTo为true,则使用moveTo开始片段。
setPath(Path path, boolean forceClosed):将path与PathMeasure 进行关联。

上述为本文所使用的方法,PathMeasure其他详细方法可参照官方文档PathMeasure。

四、实现

1、初始化画笔,佩奇出了眼睛和眼珠的颜色不同外,其他部位都用粉红色画笔绘制,这里定义了三种画笔;

 private void initPaint() {mPaint = new Paint();mPaint.setColor(Color.parseColor("#FF69B4"));mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(6);mPaint.setAntiAlias(true);mEyePaint = new Paint();mEyePaint.setColor(Color.parseColor("#F0F8FF"));mEyePaint.setAntiAlias(true);mEyeBallPaint = new Paint();mEyeBallPaint.setColor(Color.BLACK);mEyeBallPaint.setAntiAlias(true);}

2、绘制佩奇外壳,佩奇身体呈弧形状,则需要运用到二阶和三阶贝塞尔曲线,利用贝塞尔曲线的数学公式大致确定出绘制起始位置,控制点和结束点。

private void drawShell(Canvas canvas) {Path shellPath = new Path();shellPath.moveTo(200, 100 - mRadius);
//三阶贝塞尔曲线,设置两个控制点。shellPath.cubicTo(800, 100 - mRadius, 1000, 600, 600, 700);shellPath.cubicTo(300, 700, 300, 280, 350, 250);
//两阶贝塞尔曲线,设置一个控制点。shellPath.quadTo(200, 210, 200, 100 + mRadius);drawAll(canvas,shellPath);}

3、依据各个位置点绘制出曲线后,PathMeasure和曲线路径进行关联,依据PathMeasure的getSegment方法,随着停止位置的不断增加,获取到的路径片段也在不停的增长,也就实现了路径绘制的动态效果。

 private void drawAll(Canvas canvas, Path path) {Path dst = new Path();
//创建新的带有已绘制好的路径的PathMeasuremPathMeasure = new PathMeasure(path, false);
//获取路径的总长度mLength = mPathMeasure.getLength();
//获取起始位置到停止位置中的片段mPathMeasure.getSegment(0, mStop, dst, true);
//开始绘制canvas.drawPath(dst, mPaint);
//停止位置不断增加,路径就会不断绘制if (mStop < mLength) {mStop += mLength / 400;invalidate();}}

4、使用相同的手法先绘制出耳朵,鼻子和嘴巴的路径,然后按照上述PathMeasure的过程依次获取片段实现,详细代码见六。

五、总结

小猪佩奇的绘制需要耐心,其中身体部分涉及到贝塞尔曲线,需要数学来计算,后期需要加强对公式的了解,PathMeasure的方法有很多,在实现绘制路径的动态效果上层出不穷,例如绘制无规则形状的进度条,随手势滑动绘制出随意的线条等等。后续加强对PathMeasure其他方法的使用。

六、项目地址

项目地址:https://github.com/fuusy/PigDraw


欢迎扫码关注公众号:小猿说

啥是佩奇?打造Android界佩奇相关推荐

  1. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)

    上一篇博客我们已经带大家简单的吹了一下IoC,实现了Activity中View的布局以及控件的注入,如果你不了解,请参考:Android 进阶 教你打造 Android 中的 IOC 框架 [View ...

  2. 打造Android微信朋友圈下拉刷新控件

    打造Android微信朋友圈下拉刷新控件> 转载于:https://www.cnblogs.com/zhujiabin/p/5707789.html

  3. 视频教程-FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器-Android

    FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发 ...

  4. android so调用java,AndServer+Service打造Android服务器实现so文件调用

    so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作. native 层的开发就是通指的 JNI/NDK 开发, ...

  5. AndServer+Service 打造 Android 服务器实现 so 文件调用

    "NightTeam",一个值得加星标的公众号. 正文共:5623 字 26 图 预计阅读时间:15 分钟 作者:  妄为 so 文件调用 随着 Android 移动安全的高速发展 ...

  6. 打造Android的中文Siri语音助手

    打造Android的中文Siri语音助手(一)--小I机器人的接口 分类: android2011-12-02 14:10 7879人阅读 评论(44) 收藏 举报 androidstringpath ...

  7. Unity3D应用--打造Android车载3D车模桌面(车载主界面开发)

    前言 Android中应用加载Unity3D来显示3D效果参考上一篇博文:Unity3D导出Android工程(Android中应用Unity3D) 透明背景实现参考另一篇博文: 在Android中U ...

  8. 视频教程-FFmpeg打造Android万能音频播放器-Android

    FFmpeg打造Android万能音频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发.底层NDK开发等:有开源项目:ht ...

  9. termux目录_Termux打造Android渗透机

    前言 Termux是运行在Android终端上的linux模拟器.不需要root,支持apt管理软件包,可安装python.ruby.go.mysql等各种坏境. 可以用它来搭建渗透环境,安装nmap ...

最新文章

  1. java程序能转变为javafx_如何将intellij中的普通Java项目转换为JavaFx项目
  2. 逐个访问URL的每个查询字符串参数
  3. word报错:题注或页码中不含章节编号。请使用“开始”选项卡上的“多级列表”按钮,然后选择链接到标题样式的编号方案(无法添加题注)
  4. 理解Floyd-Warshall算法
  5. 无法直接启动带有“类库输出类型”的项目
  6. 两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud
  7. (53)Verilog HDL上升沿采样
  8. linux windows死机,linux死机的处理方式
  9. python zlib module_python 安装 setuptools Compression requires the (missing) zlib module 的解决方案...
  10. In this way, Wang Xing became Li Xiang’s closest
  11. 平均数和均值一样吗_求平均数!
  12. 抖音短视频 产品需求文档
  13. KEIL C51出现 runtime error R6002 floating point support not loaded解决办法
  14. 目前计算机硬件安全,计算机硬件与网络安全
  15. Keytool 简述
  16. 利用cad计算型材的弹性模量_已知阶梯形直杆受力如图所示,材料的弹性模量
  17. iMovie 裁剪视频
  18. 第十二章(项目采购管理)知识点
  19. win7下安装MQTT Paho客户端
  20. 排序 ---- 快排(C语言)

热门文章

  1. 计算机毕业设计(附源码)python在线药物配送系统
  2. 4. Netty+SpringBoot实现IM服务 之 用户与channel绑定
  3. 2019年7月20日 星期六 今日计划
  4. VR语音交互开发总结
  5. 求助 potato被永久封禁
  6. 配置一个vue-cli3.0项目
  7. python编写人口预测图_Python可视化神器——pyecharts(实例之人口地图)
  8. SAP ABAP实现类似于ME23N/MIGO的折叠屏幕开发
  9. 新标准日本语初级 第一课
  10. 利用花生壳实现B电脑远程连接或程序访问A电脑上的数据库,并将图片音频从B电脑存储至A电脑上的SQL Server数据库并读出