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

use*_*623 5 transparency android bitmap android-canvas

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

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

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

android:theme="@android:style/Theme.Translucent"
Run Code Online (Sandbox Code Playgroud)

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

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

use*_*623 6

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

@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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

问候.