做停车位项目的时候,想要实现在自己拍照上传的图片作为背景手绘车位的路线图,虽然最后因为图片压缩丢像素和让设计吐槽制作的不专业(主要还是领导决定不要了,就不了了之了。。。),但是当中遇到了一个问题所以觉得记一下毕竟也是让自己头疼了一阵。
上传的大致流程就是拍照之后照片存储到本地的同时也上传到服务器上(此时已经经历了一次压缩),然后从服务器上下载下来进行手绘(说到手绘就用了一个比较6的三方,在这里贴上GitHub的链接GitHub - zzyyppqq/DrawingBoard: 手绘板)下载之后当做背景然后使用第三方进行绘话然后将背景图和涂鸦一起进行保存,在保存这里就出现了问题
/**
* Returns a new bitmap associated with drawed canvas
*
* @return
*/
public Bitmap getBitmap() {
if (paths.size() == 0)
return null;
if (bitmap == null) {
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.eraseColor(background);
}
Canvas canvas = new Canvas(bitmap);
for (Pair<Path, Paint> p : paths) {
canvas.drawPath(p.first, p.second);
}
return bitmap;
}
这个方法是用来返回涂鸦的图片的,但是bitmap是不允许在原图上进行修改,所以三方就记录了你每一笔画的坐标然后新建一个bitmap对象重新设置了一个纯色的背景再将之前记录的每一笔重新画上去,但是这样就仅仅得到了一个背景是白色的涂鸦图片((╯‵□′)╯︵┻━┻,那我到底在忙些什么),所以不行。然后就只能再想办法,小白没啥经验只好去问大佬,嗯 实现了效果,有个可靠地大佬还是不错的。
就是用FrameLayout布局把滑板控件包裹起来然后调用方法
mFl_llllll = (FrameLayout) view.findViewById(R.id.fl_llllll);
mFl_llllll.setDrawingCacheEnabled(true);
mFl_llllll.buildDrawingCache();
bitmap=mFl_llllll.getDrawingCache();
通过getDrawingCache()方法返回布局所包含的并且转化成bitmap对象,是的没错,你在想我就是进行了截图处理,然后我去查了一下,是的。。。可以用来作为截图功能实现的原理。虽然最后效果实现出来了,但是因为手绘本身就比较LOW(客户会需要一个标识什么的,我这里只有笔直的一道道弯,还有因为像素损失的太多,直线都变成锯齿了,曲线跟金轮法王的武器似的),所以最后并没有采用。不过把效果实现出来了也是挺让人开心的。