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

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

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


一、怎么画??

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

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

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

    2、paint

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

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

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

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

android 使用画布实现电子签名板功能并保存到本地_第1张图片

实现view的3个构造方法

android 使用画布实现电子签名板功能并保存到本地_第2张图片

intiview

android 使用画布实现电子签名板功能并保存到本地_第3张图片

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

android 使用画布实现电子签名板功能并保存到本地_第4张图片

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

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

canvas(canvasBitmap)

3、开画

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

android 使用画布实现电子签名板功能并保存到本地_第5张图片

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

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

onTouchEven()

按下去的时候记录坐标


按下时的操作

先清空之前的画笔 reset

开始画,moveto(x,y)

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

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


移动时的操作

quadto(),画出贝塞尔曲线

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


手指抬起的时候



完整的onTouchEvent

android 使用画布实现电子签名板功能并保存到本地_第6张图片


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

android 使用画布实现电子签名板功能并保存到本地_第7张图片

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

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

android 使用画布实现电子签名板功能并保存到本地_第8张图片

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


二、怎么保存?

android 使用画布实现电子签名板功能并保存到本地_第9张图片

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

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


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

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

private  static  Bitmap canvasBitmap;

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


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

我们在view里头修改:

原本:

android 使用画布实现电子签名板功能并保存到本地_第10张图片

修改后

android 使用画布实现电子签名板功能并保存到本地_第11张图片


在调用的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 使用画布实现电子签名板功能并保存到本地_第12张图片   android 使用画布实现电子签名板功能并保存到本地_第13张图片

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

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


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

mLinePathView.save(pathNmae, true, 10);

最后效果图如下


android 使用画布实现电子签名板功能并保存到本地_第14张图片android 使用画布实现电子签名板功能并保存到本地_第15张图片

android 使用画布实现电子签名板功能并保存到本地_第16张图片


你可能感兴趣的:(android 使用画布实现电子签名板功能并保存到本地)