本发明涉及点赞功能交互设计技术领域,具体说是一种点赞图片消失动画算法。
背景技术:
为了丰富点赞功能的动画效果,设计了全新的交互模式,用户点击点赞按钮后,会有一张或多张点赞图片呈现并逐渐移动消失,例如:图片先出现在下部,然后逐渐上移,在上移过程中逐渐消失。
现有的图片消失动画,大多是简单的调整图片的透明度,动画效果单一,不能凸显个性化及app的精心设计,有必要对点赞图片消失动画进一步进行优化。
技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种点赞图片消失动画算法,在点赞图片消失动画中增加光晕效果,光晕围绕图片边缘形成,光晕的半径和颜色可以随意设置,不同的开发项目可根据需求进行自定义设置,可选择不同的图片,提高开发效率,用户体验更好。
为达到以上目的,本发明采取的技术方案是:
一种点赞图片消失动画算法,其特征在于,包括如下步骤:
设定一静态函数addhaloforimage,用于为图片设置光晕,其中包括:
变量bitmap,用于指定点赞图片的获取路径,
变量halowidthpx,用于设定光晕的范围,单位默认为像素值,
变量halocolor,用于设定光晕颜色,
静态函数的返回参数为bitmap对象,该bitmap对象即为用户可使用的带光晕的bitmap;
从变量bitmap指定的获取路径得到点赞图片后,进行如下处理:
生成一个画笔paint对象p,
调用p.setcolor(halocolor)设定画笔颜色为指定的光晕颜色,
调用blurmaskfilter(halowidthpx,blurmaskfilter.blur.solid)设置画笔遮罩滤镜,然后返回到maskfilter的对象bmf,
bmf作为模糊对象,通过p.setmaskfilter(bmf)设置给画笔p,
创建一个新的bitmap对象d,
通过bitmapdcreatebitmap的api创建一个空的新的bitmap,大小与原始图像大小一致,
在调用bitmapdcreatebitmap时,通过bitmap.config.argb_8888设定颜色属性为argb_8888,以提高图像清晰度,
创建一个画布对象canvasc,参数是新的bitmap对象d,
在刚创建的画布对象canvasc上绘制图像。
在上述技术方案的基础上,设定画笔颜色后,进一步调用p.setantialias(true),启用画笔的抗锯齿效果,防止边缘的锯齿,
调用p.setfilterbitmap(true)用来对位图进行滤波处理,提升动画清晰度。
在上述技术方案的基础上,在调用bitmapdcreatebitmap时,大小与原始图像大小一致通过调用bitmap.getwidth()及bitmap.getheight()实现。
在上述技术方案的基础上,在刚创建的画布对象canvasc上绘制图像,具体步骤如下:
调用c.drawbitmap函数,参数是原始图像bitmap,
设定绘制图形的起始点坐标,为从(halowidthpx,halowidthpx)坐标点开始绘制c.drawbitmap(bitmap.extractalpha(),halowidthpx,halowidthpx,p),即从原始图像的左上角到遮罩距离进行绘制,
设定使用画笔p,绘制出带遮罩滤镜效果的图片,
然后,将原来的图形绘制上c.drawbitmap(bitmap,halowidthpx,halowidthpx,p),因为滤镜的半径是halowidthpx,故需覆盖住已经呈现滤镜效果的图片上。
在上述技术方案的基础上,在刚创建的画布对象canvasc上绘制图像,还包括如下设置两张图片相交时的模式的步骤:
调用画笔p的setxfermode方法p.setxfermode,
设置画笔的setxfermode属性为porterduff.mode.src_atop的叠加方式porterduffxfermode(porterduff.mode.src_atop),
取下层图像非交集部分与上层图像交集部分,使用画笔p在原始图像和目标图像进行叠加。
本发明所述的点赞图片消失动画算法,在点赞图片消失动画中增加光晕效果,光晕围绕图片边缘形成,光晕的半径和颜色可以随意设置,不同的开发项目可根据需求进行自定义设置,可选择不同的图片,提高开发效率,用户体验更好。
附图说明
本发明有如下附图:
图1本发明的流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的点赞图片消失动画算法,包括如下步骤:
设定一静态函数addhaloforimage,用于为图片设置光晕,其中包括:
变量bitmap,用于指定点赞图片的获取路径,
变量halowidthpx,用于设定光晕的范围,单位默认为像素值,
变量halocolor,用于设定光晕颜色,
静态函数的返回参数为bitmap对象,该bitmap对象即为用户可使用的带光晕的bitmap;
从变量bitmap指定的获取路径得到点赞图片后,进行如下处理:
生成一个画笔paint对象p,
调用p.setcolor(halocolor)设定画笔颜色为指定的光晕颜色,
调用blurmaskfilter(halowidthpx,blurmaskfilter.blur.solid)设置画笔遮罩滤镜,然后返回到maskfilter的对象bmf,
bmf作为模糊对象,通过p.setmaskfilter(bmf)设置给画笔p,
创建一个新的bitmap对象d,
通过bitmapdcreatebitmap的api创建一个空的新的bitmap,大小与原始图像大小一致,
在调用bitmapdcreatebitmap时,通过bitmap.config.argb_8888设定颜色属性为argb_8888,以提高图像清晰度,
创建一个画布对象canvasc,参数是新的bitmap对象d,
在刚创建的画布对象canvasc上绘制图像。
在上述技术方案的基础上,设定画笔颜色后,进一步调用p.setantialias(true),启用画笔的抗锯齿效果,防止边缘的锯齿,
调用p.setfilterbitmap(true)用来对位图进行滤波处理,提升动画清晰度。
在上述技术方案的基础上,在调用bitmapdcreatebitmap时,大小与原始图像大小一致通过调用bitmap.getwidth()及bitmap.getheight()实现,
可采用以下代码:
bitmapd=bitmap.createbitmap(bitmap.getwidth()+halowidthpx*2,bitmap.getheight()+halowidthpx*2,bitmap.config.argb_8888)。
在上述技术方案的基础上,在刚创建的画布对象canvasc上绘制图像,具体步骤如下:
调用c.drawbitmap函数,参数是原始图像bitmap,
设定绘制图形的起始点坐标,为从(halowidthpx,halowidthpx)坐标点开始绘制c.drawbitmap(bitmap.extractalpha(),halowidthpx,halowidthpx,p),即从原始图像的左上角到遮罩距离进行绘制,
设定使用画笔p,绘制出带遮罩滤镜效果的图片,
然后,将原来的图形绘制上c.drawbitmap(bitmap,halowidthpx,halowidthpx,p),因为滤镜的半径是halowidthpx,故需覆盖住已经呈现滤镜效果的图片上。
在上述技术方案的基础上,在刚创建的画布对象canvasc上绘制图像,还包括如下设置两张图片相交时的模式的步骤:
调用画笔p的setxfermode方法p.setxfermode,
设置画笔的setxfermode属性为porterduff.mode.src_atop的叠加方式porterduffxfermode(porterduff.mode.src_atop),
取下层图像非交集部分与上层图像交集部分,使用画笔p在原始图像和目标图像进行叠加。
在设置画笔的setxfermode属性时,porterduff有很多种叠样式,比如显示交集,或者目标图像覆盖在原始图像形成新的效果等等,均可按需选择,简单列举如下:
porterduff.mode.clear清除画布上图像
porterduff.mode.src显示上层图像
porterduff.mode.dst显示下层图像
porterduff.mode.src_over上下层图像都显示,上层居上显示
porterduff.mode.dst_over上下层都显示,下层居上显示
porterduff.mode.src_in取两层图像交集部门,只显示上层图像
porterduff.mode.dst_in取两层图像交集部门,只显示下层图像
porterduff.mode.src_out取上层图像非交集部门
porterduff.mode.dst_out取下层图像非交集部门
porterduff.mode.src_atop取下层图像非交集部门与上层图像交集部门
porterduff.mode.dst_atop取上层图像非交集部门与下层图像交集部门
porterduff.mode.xor取两层图像的非交集部门。
以下为一具体实施例的完整代码示意:
publicstaticbitmapaddhaloforimage(bitmapbitmap,inthalowidthpx,inthalocolor){
if(bitmap!=null){
paintp=newpaint();
p.setcolor(halocolor);
p.setantialias(true);
p.setfilterbitmap(true);
maskfilterbmf=newblurmaskfilter(halowidthpx,blurmaskfilter.blur.solid);
p.setmaskfilter(bmf);
bitmapd=bitmap.createbitmap(bitmap.getwidth()+halowidthpx*2,bitmap.getheight()+halowidthpx*2,bitmap.config.argb_8888);
canvasc=newcanvas(d);
c.drawbitmap(bitmap.extractalpha(),halowidthpx,halowidthpx,p);
p.setxfermode(newporterduffxfermode(porterduff.mode.src_atop));
c.drawbitmap(bitmap,halowidthpx,halowidthpx,p);
bitmap.recycle();
system.gc();
returnd;
}
returnbitmap;
}。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。