2010-11-11 104 views
9

有没有办法在Android中的位图上绘制圆形渐变蒙版?试图产生类似于模糊窗口的东西。点击窗口,透明的圆圈显示窗口背后的内容。预先使用渐变使圆的中心是完全透明的,并且离中心越远越不透明。这可能吗?Android圆形渐变Alpha蒙版

我是Android新手,所以任何代码示例将不胜感激。

谢谢。

回答

19
private void drawFoggyWindowWithTransparentCircle(Canvas canvas, 
     float circleX, float circleY, float radius) { 

    // Get the "foggy window" bitmap 
    BitmapDrawable foggyWindow = 
     (BitmapDrawable) getResources().getDrawable(R.drawable.foggy_window); 
    Bitmap foggyWindowBmp = foggyWindow.getBitmap(); 

    // Create a temporary bitmap 
    Bitmap tempBitmap = Bitmap.createBitmap(
      foggyWindowBmp.getWidth(), 
      foggyWindowBmp.getHeight(), 
      Bitmap.Config.ARGB_8888); 
    Canvas tempCanvas = new Canvas(tempBitmap); 

    // Copy foggyWindowBmp into tempBitmap 
    tempCanvas.drawBitmap(foggyWindowBmp, 0, 0, null); 

    // Create a radial gradient 
    RadialGradient gradient = new android.graphics.RadialGradient(
      circleX, circleY, 
      radius, 0xFF000000, 0x00000000, 
      android.graphics.Shader.TileMode.CLAMP); 

    // Draw transparent circle into tempBitmap 
    Paint p = new Paint(); 
    p.setShader(gradient); 
    p.setColor(0xFF000000); 
    p.setXfermode(new PorterDuffXfermode(Mode.DST_OUT)); 
    tempCanvas.drawCircle(circleX, circleY, radius, p); 

    // Draw tempBitmap onto the screen (over what's already there) 
    canvas.drawBitmap(tempBitmap, 0, 0, null); 
} 
+1

谢谢!很有帮助! – 2010-11-12 23:22:06

+0

感谢这个答案,它帮了我很多。 – 2012-08-02 17:22:36