本文转自:http://blog.csdn.net/awp258/article/details/7967939
1.将背景图片在屏幕的canvas画布上先画好,例如canvas.drawBitmap(bgBitmap,0,0,null);
2.新建一个Bitmap,例如Bitmap tempBitmap=Bitmap.createBitmap(100,100,Config.ARGB_4444);并以此Bitmap新建一个临时画布canvas例如:Canvas temptCanvas=new Canvas(tempBitmap);然后再执行一步把tempBitmap的背景色画成透明的temptCanvas.drawColor(Color.TRANSPARENT);这样做的目的是把新建的那个临时画布的目标定位在哪个tempBitmap上,这样做以后,调用temptCanvas的一切draw函数,都会把相应的图像画在临时的tempBitmap上,而不是
在原先的屏幕上。
3.临时画布temptCanvas和临时Bitmap建好后,下面就是开始绘画了,要注意的是现在的画点,画线什么的都是调用temptCanvas而不是原先屏幕上的canvas,比如应该是temptCanvas.drawPoint ,temptCanvasRect, temptCanvas.drawLine等等,如果现在要画橡皮的痕迹,那么先要设置画笔的颜色mPaint.setColor(Color.BLACK);这里只要不设置成Color.TRANSPARENT透明色就行,颜色任意;再设置画笔的模式paint.setXfermode(new PorterDuffXfermode(Mode.DST_OUT));这一步非常重要,它的作用是用此画笔后,画笔划过的痕迹就变成透明色了。画笔设置好了后,就可以调用该画笔进行橡皮痕迹的绘制了,例如temptCanvas.drawPath(eraPath,mPaint);
4.在所有的画笔痕迹和橡皮痕迹绘制完成后,执行最后一步,canvas.drawBitmap(tempBitmap,0,0,null);这里要注意的是canvas而不是temptCanvas了!temptCanvas负责的是将各种画笔痕迹画在tempBitmap上,而canvas负责将tempBitmap绘制到屏幕上。
这样就完成了橡皮功能了!总的思路就是,先在屏幕上绘制出来,其余的各种画笔痕迹(包括橡皮痕迹)统统绘制在一个临时的Bitmap上,至于橡皮则使用Mode.DST_OUT模式,将橡皮痕迹处Bitmap设置为透明。然后再将这个临时的Bitmap绘制在屏幕上,这样透明的地方就会显示出背景图片了,完成橡皮效果,这个有点类似PS里的图层思想(在此感谢3楼提供的思路,谢谢~),省时实力。