2010-11-11 12 views
9

C'è un modo per disegnare una maschera gradiente circolare su una bitmap in Android? Cercando di produrre qualcosa di simile a una finestra nebbiosa. Fare clic sulla finestra e un cerchio trasparente mostra che cosa sta dietro la finestra. Preferibilmente usando un gradiente in modo che il centro del cerchio sia completamente trasparente e più lontano dal centro meno trasparente. È possibile?Maschera Alpha gradiente circolare Android

Sono nuovo per Android quindi qualsiasi campione di codice sarebbe apprezzato.

Grazie.

risposta

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

Grazie! Molto utile! –

+0

Grazie per questa risposta, mi ha aiutato molto. –

Problemi correlati