Java 在圆后面绘制对象,但在'后面的对象除外;背景';

Java 在圆后面绘制对象,但在'后面的对象除外;背景';,java,android,android-canvas,draw,Java,Android,Android Canvas,Draw,情景:我在安卓游戏上有一块画布,我有一些对象(我会尽量简单):世界(所有激光和块对象都存储在哪里)、块和激光。我可以在画布上绘制所有这些对象 我想把它们“隐藏”在黑色的“背景”后面,然后画一个模糊的“透明”圆圈,这样所有对象都隐藏在黑色背景后面,除了圆圈后面的对象 我已经考虑过了,但是我想不出一个方法来做到这一点 图像: 这是我的实际情况: 这是预期的结果: 执行以下操作: public void drawBitmapsInCanvas(Canvas c){ c.dra

情景:我在安卓游戏上有一块画布,我有一些对象(我会尽量简单):
世界
(所有
激光
对象都存储在哪里)、
块和激光
。我可以在画布上绘制所有这些对象

我想把它们“隐藏”在黑色的“背景”后面,然后画一个模糊的“透明”圆圈,这样所有对象都隐藏在黑色背景后面,除了圆圈后面的对象

我已经考虑过了,但是我想不出一个方法来做到这一点

图像:

这是我的实际情况:

这是预期的结果:

执行以下操作:

    public void drawBitmapsInCanvas(Canvas c){
        c.drawBitmap(block, new Rect(/*coordinates here*/), new Rect(/*More coordinates*/),null);
        c.drawBitmap(block2, new Rect(/*coordinates here*/), new Rect(/*More coordinates*/),null);
        c.drawBitmap(laser, new Rect(/*coordinates here*/), new Rect(/*More coordinates*/),null);
        c.drawColor(Color.BLACK);//this hides everything under your black background.
        c.drawBitmap(circle, new Rect(/*coordinates here*/), new Rect(/*More coordinates*/),null);
    }
如果你想要透明度:

    Paint paint =new Paint();
    paint.setARGB(120,0,0,0); //for the "120" parameter, 0 is completely transparent, 255 is completely opaque.
    paint.setAntiAlias(true);
    c.drawBitmap(bmp,Rect r,Rect rr, paint);
或者,如果您试图更改单个像素的不透明度,则该方法要复杂一些(我没有测试代码,但您已经了解了要点):

公共静态最终位图getNewBitmap(位图bmp,int CircleCenter,
国际循环中心(国际循环中心){
//圆坐标是相对于位图(0,0)的距离
//,而不是画布本身的(0,0)。圆的半径是圆的半径。
位图温度=bmp.copy(Bitmap.Config.ARGB_8888,true);
int[]像素=新int[temp.getWidth()*temp.getHeight()];
temp.getPixels(像素,0,temp.getWidth(),0,0,temp.getWidth(),temp.getHeight());
int计数器=0;

对于(int i=0;i您可以创建一个黑色矩形的图像,其中有一个透明的孔。该孔将是您可以看到的圆,图像将渲染到您希望看到的点上。然后,您可以围绕图像绘制四个黑色矩形,以覆盖屏幕的其余部分。

如果您尝试qwertyuiop5040,当您尝试将其应用于大图像时,将获得一个低性能。例如,1000*800像素的图像。然后您将有一个循环:

for (int i = 0 ; i < 1000*800; i++)
for(int i=0;i<1000*800;i++)

你说得对。但通常你不会编辑这种大小或接近这种大小的图像:它们往往是背景,甚至大多数背景都可以缩小。
for (int i = 0 ; i < 1000*800; i++)