重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android开发中,在自定义view中,使用Canvas的相应操作,实现类似签名的画板,但有一个问题则是,正常的Canvas操作可以用画板对手机的滑动进行绘制,但是当遇到一些圆滑曲线时,会显得不够顺滑,甚至有折角,这里可以使用二阶beizer曲线来使得曲线更加圆滑,提升用户体验。
成都创新互联拥有十多年成都网站建设工作经验,为各大企业提供做网站、成都网站制作服务,对于网页设计、PC网站建设(电脑版网站建设)、app软件定制开发、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、主机域名等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。
定义一个自定义SignView,继承自View,在里面定义四个变量:
private Path mPath; private Paint mPaint; private float mX; private float mY;
在构造方法里对路径和画笔进行初始化:
public SignView(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(10); mPath = new Path(); }
在onDraw()中对canvas做操作,这里值得一提的是调用drawColor方法,不然最终如果保存为本地图片的话,会使得背景为黑色,如果画笔也选择黑色的话,则会成一张全黑的图片:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); canvas.drawPath(mPath, mPaint); }
接下来重写onTouchEvent方法:
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mX = event.getX(); mY = event.getY(); mPath.moveTo(mX, mY); break; case MotionEvent.ACTION_MOVE: float x1 = event.getX(); float y1 = event.getY(); float cx = (x1 + mX) / 2; float cy = (y1 + mY) / 2; mPath.quadTo(mX, mY, cx, cy); mX = x1; mY = y1; break; } invalidate(); return true; }
手指按下时,取得按下的坐标,移动的时候,得到当前左边,且取两点中间的cx,cy作为beizer曲线的控制点,然后调用quadTo方法绘制二阶beizer曲线,进行连线操作,最终则是调用invalidate方法进行重绘。
这样一个使连线更加圆滑的画板控件简单实现了,如果需要保存为本地,或者bitmap对象,则需要做其他一些额外的操作了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。