2010-11-11 7 views
9

안드로이드의 비트 맵에 원형 그라디언트 마스크를 그리는 방법이 있습니까? 안개가 자욱한 창문과 비슷한 것을 만들어 내려고합니다. 창을 클릭하면 투명한 원이 나타나 창 뒤쪽에있는 것을 보여줍니다. 그라디언트를 사용하면 원의 중심이 완전히 투명 해지고 중앙에서 멀어 질수록 투명 해집니다. 이것이 가능한가?안드로이드 원형 그라디언트 알파 마스크

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

고마워요! 매우 도움이된다! –

+0

이 답변을 주셔서 감사합니다. –