android 使用画布实现电子签名板功能并保存到本地

时间:2024-05-21 17:58:43

下一篇-> -> ->使用popupWindow 弹框显示画板 <- <- <-

有一个bug 存在。保存路径的过程出错了。有些手机是可以进行的。后续更改保存路径问题。(已修改,见最后)


一、怎么画??

1、首先我们需要一个view在进行绘制我们的内容,那么创建一个类来继承view, 

你需要画画,那你需要什么共工具??画布,画笔

    1、canvas--在我的理解,虚拟化的一个画布区域

    2、paint

那你用什么东西来垫画布??

    3、bitmap   相当于正真的吧东西画到纸上一样

2、初始化我们需要的view以及方法

    自己手打吧骚年,那样才有影响,cv模式记不清的

android 使用画布实现电子签名板功能并保存到本地

实现view的3个构造方法

android 使用画布实现电子签名板功能并保存到本地

intiview

android 使用画布实现电子签名板功能并保存到本地

然后在 onsizeChanged 吧bitmap 和canvas  给搞上去

android 使用画布实现电子签名板功能并保存到本地

这段的意思是 onsizechange 当view的大小改变的时候 ,进行相应的操作

bitmap.careBitmap  创建一个与view一样大小的画布

canvas(canvasBitmap)

3、开画

ondraw方法,肯定就是用来画画的啦,不要在意注释的东西,哈哈

android 使用画布实现电子签名板功能并保存到本地

画布能画东西,那怎么样也得有一只能画画的手吧;

走起,搞一双+(*)鹰之手

onTouchEven()

按下去的时候记录坐标

android 使用画布实现电子签名板功能并保存到本地

按下时的操作

先清空之前的画笔 reset

开始画,moveto(x,y)

更换动作的时候记录最后的位置,这里你要明白,点下去 就是down的操作,手指一旦移动就不是down啦,

分清楚。所以在down操作之后要记住按住屏幕时的坐标

android 使用画布实现电子签名板功能并保存到本地

移动时的操作

quadto(),画出贝塞尔曲线

你也可以试一试lintTo时怎样的

android 使用画布实现电子签名板功能并保存到本地

手指抬起的时候

android 使用画布实现电子签名板功能并保存到本地


完整的onTouchEvent

android 使用画布实现电子签名板功能并保存到本地


搞定、画画的部分就到这了,结束???不存在的。

android 使用画布实现电子签名板功能并保存到本地

是不是不一样,你会发现使用上面我提供的方法你会画出按钮下面那个路径,并不是很圆滑

让我们改一改,升级一下画画的手

android 使用画布实现电子签名板功能并保存到本地

升级完毕,这是让曲线更加的圆滑


二、怎么保存?

android 使用画布实现电子签名板功能并保存到本地

扔上去就搞定啦,至于路径怎么搞,百度一下就有了嘛是吧。google一下就行了嘛是吧。

你运行一下啊代码你会发现,坑爹,报错了=-=

android 使用画布实现电子签名板功能并保存到本地

是不是这个错啊,一般就就是 一个空指针

就是这里,把我坑了好久的问题,为毛空??加一个static 就搞定了

private  static  Bitmap canvasBitmap;

原因我也不知道?那怎么办??我要好好研究啊~~~


bug修改在机子上无法正确保存路径

我们在view里头修改:

原本:

android 使用画布实现电子签名板功能并保存到本地

修改后

android 使用画布实现电子签名板功能并保存到本地


在调用的save()方法的activity/fragment/等等  修改:

String pathName = Environment.getExternalStorageDirectory().getAbsolutePath();
Log.d("path", "writeFileData: " + Environment.getExternalStorageDirectory());
File savefile = new File(pathName, "test");
if (!savefile.exists()) {
    savefile.mkdir();
}

先创建一个file来存储我们要保存的图片。

pathname 存储的地址就是/stroage/sdcard/test

android 使用画布实现电子签名板功能并保存到本地   android 使用画布实现电子签名板功能并保存到本地

可以看见都是存在的,创建完成之后我们在把我们的文件下的图片给个名字

String pathNmae =savefile.getPath()+ "/"+String.valueOf(System.currentTimeMillis())+".png";


最后我们吧pathName传进去就可以了。

mLinePathView.save(pathNmae, true, 10);

最后效果图如下


android 使用画布实现电子签名板功能并保存到本地android 使用画布实现电子签名板功能并保存到本地

android 使用画布实现电子签名板功能并保存到本地