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对象,则需要做其他一些额外的操作了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。