首页 > 系统 > Android > 正文

Android曲线更圆滑的签名画板

2019-10-22 18:12:25
字体:
来源:转载
供稿:网友

Android开发中,在自定义view中,使用Canvas的相应操作,实现类似签名的画板,但有一个问题则是,正常的Canvas操作可以用画板对手机的滑动进行绘制,但是当遇到一些圆滑曲线时,会显得不够顺滑,甚至有折角,这里可以使用二阶beizer曲线来使得曲线更加圆滑,提升用户体验。

定义一个自定义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方法,不然最终如果保存为本地图片的话,会使得背景为黑色,如果画笔也选择黑色的话,则会成一张全黑的图片:

@Overrideprotected 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对象,则需要做其他一些额外的操作了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表