2010-11-11 21 views
9

Android'de bir bitmap üzerinde dairesel bir degrade maskesi çizmenin bir yolu var mı? Sisli bir pencereye benzer bir şey üretmeye çalışıyorum. Pencereyi tıklayın ve pencerenin arkasında neler olduğunu gösteren şeffaf bir daire görünür. Bir eğimin önceden kullanılmasıyla, dairenin merkezi tamamen şeffaftır ve merkezden daha az şeffaftır. Mümkün mü?Android Dairesel Degrade Alfa Maskesi

Android için yeniyim, bu nedenle herhangi bir kod örneği takdir edilecektir.

Teşekkürler.

cevap

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

Teşekkür ederiz! Çok yararlı! –

+0

Bu cevap için teşekkürler, bana çok yardımcı oldu. –