时间:2015-05-29 来源:

Android涂鸦技术及刮刮乐示例分析 【移动开发】

概述:   很早之前就想研究一下Android中的涂鸦web切图报价,其实也说不上是研究了,web切图报价毕竟都是一些相对比较简单的知识点.下面就对基于画布(Canvas)和触摸事件(onTouchEvent)来实现涂鸦和刮刮乐.

参考: http://blog.csdn.net/lmj623565791/article/details/40162163

2.刮刮乐   思路分析及代码展示   分析:其实刮刮乐的实现思路跟涂鸦很像,psd转html都是在一块地方瞎画,html切图制作并留下痕迹(说笑了,html切图不过也不无道理.^_^).不过有一点不同的就是我们在刮刮乐的绘制过程中画笔经过的地方,wap前端外包是变成了透明的了.这里你可能会说web前端制作,那简单了,web前端制作不就是要我去覆盖两层图片承接网页制作,在去绘制触摸路径,div前端切图只是触摸路径的颜色是透明的.真的是这样的么?你可以试一试.当然web切图报价,这样是行不通的,web切图报价关于实践的最终效果大家可以自行尝试.这里的关键点在于我们要把上面的蒙层擦除且保留下面的底层.这里就用到了图形混合技术了.

http://blog.csdn.net/t12x3456/article/details/10432935

  我们通过Path保存我们触摸的路径轨迹.如下:

1.涂鸦   思路分析及代码展示   学习过Canvas的同学应该都知道我们可以通过在一个View上覆盖一个canvas,并实现View的onTouchEvent方法就可以在Canvas上留下触摸屏幕时的轨迹,符合w3c标准对于轨迹的记录还有一个类需要去了解——Path.关于Canvas更多的知识请点击这里查看.

@Override protected void onDraw(Canvas canvas) { canvas.drawText(mText, getHeight() / 2 + mTextBound.height() / 2, 0, null); } } @Override protected void onMeasure(int widthMeasureSpec, heightMeasureSpec); int width = getMeasuredWidth(); int height = getMeasuredHeight(); // 初始化bitmap mBitmap = Bitmap.createBitmap(width, Config.ARGB_8888); mCanvas = new Canvas(mBitmap); // 绘制遮盖层 mFingerPaint.setStyle(Paint.Style.FILL); mCanvas.drawRoundRect(new RectF(0, width, 30, mFingerPaint); mCanvas.drawBitmap(BitmapFactory.decodeResource(getResources(), null, 0, height), null); } 此外还有一篇也是使用了此技术的博客,web前端制作点击这里进行查看.

  触摸事件:

  1.MotionEvent.ACTION_DOWN // 触摸按下时

  3.MotionEvent.ACTION_UP   // 触摸离开时

protected void onMeasure(int widthMeasureSpec, heightMeasureSpec); int width = getMeasuredWidth(); int height = getMeasuredHeight(); // 初始化bitmap mBitmap = Bitmap.createBitmap(width, Config.ARGB_8888); mCanvas = new Canvas(mBitmap); }   绘制:

  图形混合技术一听名称是不是就是感觉很高深符合w3c标准,不过的确是很牛的技术,符合w3c标准不过Java已经给我们封装好了网页外包接活,我们只要知道怎么使用即可,jpg或psd转html而使用它则就不那么艰难了.

private void drawPath() { mFingerPaint.setStyle(Paint.Style.STROKE); mCanvas.drawPath(mPath, mFingerPaint); } 测量和绘制过程如下:

public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); int x = (int) event.getX(); int y = (int) event.getY(); switch (action) { case MotionEvent.ACTION_DOWN: actionMotionEventDown(x, y); break; } invalidate(); return true; } 上面的代码中web切图报价,我们在按下的时候实现了按下的逻辑,网站div+css在手指在屏幕上移动的时候实现了Move的逻辑.还有别忘了invalidate().invalidate()函数的主要作用是请求View树进行重绘符合w3c标准,如果你不去调用它,符合w3c标准结果就是什么事情都不会发生.

  效果图

  对于触摸事件有一个非常重要而且不可忽视的类就是MotionEvent.它有以下三个常用的动作事件:

我们需要的正是:DstOut这一条.代码中我们是这样实现的:

下面就看看onTouchEvent事件的实现过程:

protected void onDraw(Canvas canvas) { drawPath(); canvas.drawBitmap(mBitmap, 0, null); }

  路径绘制:

此人的博客的确很好,div+css制作想学习的同学也可以去参考一下这个大牛的其他博客.

  Android在绘制界面的时候会获得布局中控件的大小、位置等参数之后再去绘制.而这里我们只是通过onMeasure和onDraw来绘制承接网页制作,没有用到onLayout是因为这里只有一个控件,承接网页制作没有太多动态布局需要处理.对于路径的记录则需要onTouchEvent实现.

  效果图

  关于图形混合的详细描述web切图报价,大家可以参考这里,web切图报价我就不重复制造轮子了.不过我还是要简单介绍一下Xfermode三个子类下的一个:PorterDuffXfermode.这是一个非常强大的转换模式符合w3c标准,使用它,html切图制作可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互.

Porter-Duff规则如下:

  测量大小:

  2.MotionEvent.ACTION_MOVE // 触摸在移动过程中

PorterDuff.Mode为枚举类网页外包接活,一共有16个枚举值: 1.PorterDuff.Mode.CLEAR   所绘制不会提交到画布上. 2.PorterDuff.Mode.SRC    显示上层绘制图片 3.PorterDuff.Mode.DST   显示下层绘制图片 4.PorterDuff.Mode.SRC_OVER   正常绘制显示,wap前端外包上下层绘制叠盖. 5.PorterDuff.Mode.DST_OVER   上下层都显示.下层居上显示. 6.PorterDuff.Mode.SRC_IN    取两层绘制交集.显示上层. 7.PorterDuff.Mode.DST_IN   取两层绘制交集.显示下层. 8.PorterDuff.Mode.SRC_OUT  取上层绘制非交集部分. 9.PorterDuff.Mode.DST_OUT  取下层绘制非交集部分. 10.PorterDuff.Mode.SRC_ATOP  取下层非交集部分与上层交集部分 11.PorterDuff.Mode.DST_ATOP  取上层非交集部分与下层交集部分 12.PorterDuff.Mode.XOR   异或:去除两图层交集部分 13.PorterDuff.Mode.DARKEN   取两图层全部区域web前端制作,交集部分颜色加深 14.PorterDuff.Mode.LIGHTEN   取两图层全部,web前端制作点亮交集部分颜色 15.PorterDuff.Mode.MULTIPLY   取两图层交集部分叠加后颜色 16.PorterDuff.Mode.SCREEN   取两图层全部区域承接网页制作,交集部分变为透明色

点击次数:4937
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日ChargeSystem——One,Two,Three 【编程语言】2015年08月24日【ACM】HDU1242Rescue(优先队列)【系统运维】2015年01月21日vlan原理详解,vlan功能及优点,vlan配制命令 【互联网】2015年03月10日简单使用输入输出流 【综合】2015年07月30日Java数据结构系列之——队列(1):队列的顺序存储结构及其实现【编程语言】2014年11月24日POJ1185炮兵阵地(状压dp经典中的经典) 【研发管理】2015年07月23日基于BitSet的布隆过滤器(BloomFilter)【架构设计】2015年08月27日Android-PullToRefresh实现进入自动刷新 【编程语言】2015年07月09日EJB学习笔记四((@Remote与@Local的差异)【编程语言】2015年07月29日【从头开始写操作系统系列】实现一个GDT(3) 【综合】2015年08月16日写给浮躁的IT同仁2014年01月29日zoj2158TruckHistory【编程语言】2015年07月22日Spring的切面编程如何实现注入切面程序 【移动开发】2014年12月11日Pascal'sTriangleII 【编程语言】2015年05月20日cf251BPlayingwithPermutations暴力分类讨论 【移动开发】2015年07月10日jquery的map与get方法详解2014年01月29日数据库触发器deleted与inserted数据的差异 【互联网】2015年04月17日常用数据库的驱动程序及JDBCURL分享2014年01月29日ASP写的自动生成SELECT表单的函数2014年01月29日国内团队破解iPhone6s:获得21万美元奖金 ,,2016年11月03日Android图片处理:识别图像方向并显示【移动开发】2014年11月06日leetCode67.AddBinary(二进制加法)解题思路和方法 【编程语言】2015年07月20日Spring(三)Spring三种实例化JavaBean的方式【编程语言】2015年07月24日算法学习之排序算法(四)(希尔排序) 【系统运维】2015年08月17日DB2日期和时间的函数应用说明2014年01月29日atitit,获取表格的字段注释metadata的原理以及AND字段表格描述文档方案【综合】2015年04月07日Ubuntu14下32位库支持 【移动开发】2015年03月13日PHP伪静态技术原理以及突破原理实现介绍2014年01月29日【Java】利用正则表达式判断是否为网址 【移动开发】2015年07月16日shell学习四十六天----文件系统的空间信息df和du命令 【架构设计】2015年07月17日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)