Android曲线更圆滑的签名画板
Android开发中,在自定义view中,使用Canvas的相应操作,实现类似签名的画板,但有一个问题则是,正常的Canvas操作可以用画板对手机的滑动进行绘制,但是当遇到一些圆滑曲线时,会显得不够顺滑,甚至有折角,这里可以使用二阶beizer曲线来使得曲线更加圆滑,提升用户体验。
定义一个自定义SignView,继承自View,在里面定义四个变量:
privatePathmPath; privatePaintmPaint; privatefloatmX; privatefloatmY;
在构造方法里对路径和画笔进行初始化:
publicSignView(Contextcontext,AttributeSetattrs){ super(context,attrs); mPaint=newPaint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(10); mPath=newPath(); }
在onDraw()中对canvas做操作,这里值得一提的是调用drawColor方法,不然最终如果保存为本地图片的话,会使得背景为黑色,如果画笔也选择黑色的话,则会成一张全黑的图片:
@Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); canvas.drawColor(Color.WHITE); canvas.drawPath(mPath,mPaint); }
接下来重写onTouchEvent方法:
@Override publicbooleanonTouchEvent(MotionEventevent){ switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: mX=event.getX(); mY=event.getY(); mPath.moveTo(mX,mY); break; caseMotionEvent.ACTION_MOVE: floatx1=event.getX(); floaty1=event.getY(); floatcx=(x1+mX)/2; floatcy=(y1+mY)/2; mPath.quadTo(mX,mY,cx,cy); mX=x1; mY=y1; break; } invalidate(); returntrue; }
手指按下时,取得按下的坐标,移动的时候,得到当前左边,且取两点中间的cx,cy作为beizer曲线的控制点,然后调用quadTo方法绘制二阶beizer曲线,进行连线操作,最终则是调用invalidate方法进行重绘。
这样一个使连线更加圆滑的画板控件简单实现了,如果需要保存为本地,或者bitmap对象,则需要做其他一些额外的操作了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。