首页 > 代码库 > android项目 之 记事本(15) ----- 保存手写及绘图
android项目 之 记事本(15) ----- 保存手写及绘图
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
之前,忘了写如何将手写和绘图保存,现在补上。
首先看如何保存绘图,先看效果图:
因为记事本的绘图功能主要用到了画布,而在构建画布时,指定了Bitmap,也就是说在画布上的所画的东西都被保存在了Bitmap中,因此,我们只要保存该Bitmap,就可以将我们的所绘制的图形以图片的形式保存,主要代码如下:
/* * 保存所绘图形 * 返回绘图文件的存储路径 * */ public String saveBitmap(){ //获得系统当前时间,并以该时间作为文件名 SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmss"); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 String str = formatter.format(curDate); String paintPath = ""; str = str + "paint.png"; File dir = new File("/sdcard/notes/"); File file = new File("/sdcard/notes/",str); if (!dir.exists()) { dir.mkdir(); } else{ if(file.exists()){ file.delete(); } } try { FileOutputStream out = new FileOutputStream(file); mBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); out.flush(); out.close(); //保存绘图文件路径 paintPath = "/sdcard/notes/" + str; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return paintPath; }
这里的mBitmap就是保存画布内容的,我们将其存储在SD卡的指定目录下,并以时间作为文件名,最后返回存储该绘图文件的路径,用于将其存储到数据库中。
再看,如何保存手写:
和保存绘图一样,这里同样是以图片的形式保存在SD卡的指定目录下,但是这里有个问题,手写Activity用的是帧式布局,下层是自定义的EditText,上层同样是自定的View,用于绘图,而我们的手写最终是保存在自定义的EditText中的,当然可以用文本的形式保存手写内容,但这里为了简单起见,以及为了保存手写的颜色大小等属性,故以图片的形式保存。
因为自定义的EditText说到底还是View,所以这里就需要将View转换成图片,代码如下:
//将view转换成图片 et_handwrite.setDrawingCacheEnabled(true); Bitmap cutHandwriteBitmap = Bitmap.createBitmap(et_handwrite.getDrawingCache()); et_handwrite.setDrawingCacheEnabled(false);
这样,我们就将手写的内容保存在了Bitmap中,之后,我们就可以用保存绘图的方法将其保存,如下:
...... class ClickEvent implements OnClickListener{ @Override public void onClick(View v) { if(v == btn_save){ //得到调用该Activity的Intent对象 Intent intent = getIntent(); Bundle b = new Bundle(); String path = saveBitmap(); b.putString("handwritePath", path); intent.putExtras(b); setResult(RESULT_OK, intent); HandWriteActivity.this.finish(); } else if(v == btn_back){ HandWriteActivity.this.finish(); } } } ...... //保存手写文件 public String saveBitmap(){ //获得系统当前时间,并以该时间作为文件名 SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmss"); Date curDate = new Date(System.currentTimeMillis());//获取当前时间 String str = formatter.format(curDate); String paintPath = ""; str = str + "write.png"; File dir = new File("/sdcard/notes/"); File file = new File("/sdcard/notes/",str); if (!dir.exists()) { dir.mkdir(); } else{ if(file.exists()){ file.delete(); } } //将view转换成图片 et_handwrite.setDrawingCacheEnabled(true); Bitmap cutHandwriteBitmap = Bitmap.createBitmap(et_handwrite.getDrawingCache()); et_handwrite.setDrawingCacheEnabled(false); try { //保存绘图文件路径 paintPath = "/sdcard/notes/" + str; FileOutputStream out = new FileOutputStream(file); cutHandwriteBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return paintPath; }
至此,我们就实现了将记事本中添加的图片及手写文件保存在指定目录,并以当前时间作为文件名,这里保存文件的函数返回的是图片的路径,这是为了将记事本中的内容存储到数据库中时,只将绘图及手写的存储路径保存,而不是将整个绘图或手写保存在数据库中,这些内容,之前已有介绍,不再赘述。
android项目 之 记事本(15) ----- 保存手写及绘图