做一个模仿Windows画板喷漆笔刷效果

效果解析因为名单最终要实现的的英文WINDWOS下的画板喷漆笔刷,所以首先要对它做一个较为详细的效果解析。考虑到笔一般情况下笔刷的使用点,故此会分析一下* 线的效果细节。画点* ![ 这里写图片描述] (https://img-blog.csdn.net/20180622193810377?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhaXppeG0=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 )从左至右依次是对同一坐标点击2次,点击8次,点击16次的效果展示; 当数量趋向更大时,点的密集程度并没有很明显的偏向,基本可以确定要在圆内均匀分布* 画线* ![ 这里写图片描述] (

https://img-blog.csdn.net/20180622193933109?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhaXppeG0=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 ) 如图为匀速且缓慢滑过时,由点构成线 具体实现 项目的大致框架由 视图BasePen,两个大的模块构成。其中 ‘查看 ‘属于UI层面, BasePen属于业务逻辑层面接下来,将一一介绍这两个模块的具体。####查看此项目的承载观为 Penview酒店酒店“,不承担业务逻辑,就是起到一个容器的作用在。 '盆维佑中唯一的作用就是触发 无效()

方法。@覆盖公共布尔的onTouchEvent(MotionEvent事件){MotionEvent事件1 = MotionEvent.obtain(事件); mBasePen.onTouchEvent(事件1); switch(event.getActionMasked()){case MotionEvent.ACTION _ DOWN:case MotionEvent.ACTION _ MOVE:invalidate(); 打破; case MotionEvent.ACTION_UP:break; }返回真; } @Override protected void onDraw(Canvas canvas){super.onDraw(canvas); mBasePen.onDraw(帆布); }具体的业务逻辑,绘制,数据计算,触摸点移动移动等,全都由BasePen以及它的子类来实现了。具体的业务逻辑,绘制,数据计算,触摸点移动移动等,全都由BasePen

`` 私人列表< Point > mPoints; public void onDraw(Canvas canvas){ if(mPoints!= null &&!mPoints.isEmpty()){ canvas.drawBitmap(mBitmap,0,0,null); drawDetail(帆布); } } 先将笔刷绘制到一张位图之上,再将这张位图交给盆维佑’来绘制出来。是一个只记录了X和ý坐标的类。drawDetail(帆布帆布)是一个抽象类,由子类实现具体的绘制。滑动轨迹在BasePen “的onTouchEvent(MotionEventevent1)`

方法里。以每次DOWN事件为开始,记录MOVE内的所有坐标信息。考虑到喷漆效果基本不用处理笔锋效果,暂不考虑记录`信息(后续如果实现其他笔刷效果会优化这里).handlePoints(事件1); 打破; case MotionEvent.ACTION _ MOVE:handlePoints(event1); 打破; 大小写MotionEvent.ACTION _ UP:break; }}私人无效handlePoints(MotionEvent事件1){ 浮动X = event1.getX(); float y = event1.getY(); if(x> 0 && y> 0){ mPoints.add(new Point(x,y)); } }`` 私人无效clearPoints(){如果(M点== NULL){回报; } mPoints.clear(); } **** **喷漆实现**

protected void drawDetail(Canvas canvas){if(getPoints()。isEmpty()){return; } mTotalNum =由自定义粒子密度以及画笔宽度计算而来drawSpray(当前最新坐标点.x,当前最新坐标点.y,mTotalNum); }}

“`私人无效drawSpray(浮动的x,浮Y,INT totalNum){对于(INT I = 0;我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值