触摸时使某个位图区域透明 – >再次

我试图获得与每个线程相同的结果: 在触摸时使位图的某些区域透明 。 我坚持在这个答案中提出的代码: Lumis回答并根据SteD这个解决方案应该有效。

不幸的是不适用于我(以及另一个用户: 在触摸时使某些位图透明的区域不起作用,它会画一个黑色圆圈 ),我只是得到黑色圆圈。 我尝试了很多东西,但没有得到解决。 根据第二个post的建议使背景透明,没有任何区别。

经过多次实验,我发现透明度正常,当我设置它时

android:theme="@android:style/Theme.Translucent" 

在我的AndroidManifest.xml中,我可以看到我应用程序下的所有内容,即桌面。 我经历了很多次代码而且看不到明显的错误,只是因为我认为是因为这是Z顺序,但位图和canvas不维护z命令。 Z排序是通过按特定顺序绘制完成的(在此代码中是正确的)。

这是Android代码中优化的一些奇怪的例子,或者我在android清单文件中遗漏了什么?

最后我find了有效的解决方案:

 @Override public void onDraw(Canvas canvas){ super.onDraw(canvas); //draw background canvas.drawBitmap(bgr, 0, 150, null); //copy the default overlay into temporary overlay and punch a hole in it c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw c2.drawCircle(X, Y, 80, pTouch); //draw the overlay over the background //canvas.drawBitmap(overlay, 0, 0, null); Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); canvas.drawBitmap(overlay, 0, 0, new_paint); } 

但我不明白为什么工作。 我正在使用这个源代码调查xfermodes: android Xfermodes演示并根据此图像: Xfermodes图像

没有任何意义,除了xfermode确保覆盖位图是第二个(Z顺序)绘制的bean并且透明度开始发挥作用。 但是Z顺序应该通过绘制顺序来维护。

如果有人更好地了解如何解决这个问题,请分享您的知识。

问候。

你可以编辑onDraw()方法:

 public void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.drawColor(Color.TRANSPARENT); canvas.drawBitmap(bgr, 0, 0, null); c2.drawCircle(X, Y, 10, pTouch); Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); canvas.drawBitmap(overlay, 0, 0, new_paint); } 

我试过,它有效! 希望这个解决方案能帮到你