2010-11-11 14 views
9

Gibt es eine Möglichkeit, eine kreisförmige Farbverlaufsmaske auf einer Bitmap in Android zu zeichnen? Versuche etwas zu erzeugen, das einem nebligen Fenster ähnelt. Klicken Sie auf das Fenster und ein transparenter Kreis zeigt auf, was hinter dem Fenster ist. Man verwendet vorzugsweise einen Gradienten, so dass das Zentrum des Kreises vollständig transparent ist und je weiter aus der Mitte heraus, desto weniger durchsichtig. Ist das möglich?Android Circular Gradient Alphamaske

Ich bin neu in Android, so würden alle Code-Beispiele geschätzt werden.

Danke.

Antwort

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

Vielen Dank! Sehr hilfreich! –

+0

Danke für diese Antwort, es hat mir sehr geholfen. –