2010-11-11 4 views
9

Y at-il un moyen de dessiner un masque de dégradé circulaire sur un bitmap dans Android? Essayer de produire quelque chose de semblable à une fenêtre brumeuse. Cliquez sur la fenêtre et un cercle transparent apparaît révélant ce qui se trouve derrière la fenêtre. Utiliser de préférence un dégradé pour que le centre du cercle soit complètement transparent et que le plus éloigné du centre soit le moins transparent. Est-ce possible? Je suis nouveau sur Android, donc tous les exemples de code seraient appréciés.Android Alpha Circular Gradient Mask

Merci.

Répondre

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

Merci! Très utile! –

+0

Merci pour cette réponse, ça m'a beaucoup aidé. –