Android曲线更圆滑的签名画板

所属分类: 软件编程 / Android 阅读数: 31
收藏 0 赞 0 分享

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

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

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

更多精彩内容其他人还在看

Android异常 java.lang.IllegalStateException解决方法

这篇文章主要介绍了Android异常 java.lang.IllegalStateException解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Split()字符串分割特殊用法案例详解

本文通过案例的形式给大家详细介绍了android中split()字符串分割特殊用法的知识,非常不错具有参考借鉴价值,感兴趣的朋友参考下
收藏 0 赞 0 分享

Android仿新浪微博启动界面或登陆界面(1)

这篇文章主要为大家详细介绍了Android仿新浪微博启动界面或登陆界面的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿新浪微博oauth2.0授权界面实现代码(2)

这篇文章主要为大家详细介绍了Android仿新浪微博oauth2.0授权界面实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发中使用sqlite实现新闻收藏和取消收藏的功能

本篇文章主要介绍了sqlite实现新闻收藏和取消收藏功能,主要涉及到oracle数据库方面的内容,对于Android开发sqlite实现收藏和取消功能感兴趣的朋友可以参考下本文
收藏 0 赞 0 分享

Android仿新浪微博分页管理界面(3)

这篇文章主要为大家详细介绍了Android仿新浪微博分页管理界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android UI自定义ListView实现下拉刷新和加载更多效果

这篇文章主要介绍了Android UI自定义ListView实现下拉刷新和加载更多效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android—基于微信开放平台v3SDK开发(微信支付填坑)

这篇文章主要介绍了Android—基于微信开放平台v3SDK开发(微信支付填坑),具有一定的参考价值,有需要的可以了解一下。
收藏 0 赞 0 分享

Android仿新浪微博自定义ListView下拉刷新(4)

这篇文章主要为大家详细介绍了Android仿新浪微博自定义ListView下拉刷新,重点介绍了Adapter的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android控件之使用ListView实现时间轴效果

这篇文章主要介绍了Android基础控件之使用ListView实现时间轴效果的相关资料,本文是以查看物流信息为例,给大家介绍了listview时间轴的实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多