2012-03-31 75 views

回答

9

您可以將'羽毛效果'視爲漸變梯度,其中的alpha從100%降至0%。

Android爲此提供了RadialGradient類。您需要使用構造函數,您可以在其中指定radient的控制點,因爲您希望漸變在邊緣附近開始,而不是在中間。

Android的RadialGradient類的一個問題是它只支持完美圓,而不是橢圓。爲了彌補這一點,我們將繪製一個完美的圓圈並在之後進行縮放。

示例代碼:

private Bitmap makeFeatheredOval(int width, int height) { 

     // Determine largest dimension, use for rectangle. 
     int size = Math.max(width, height); 

     RadialGradient gradient = new RadialGradient(size/2, size/2, size/2, 
      new int[] {0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF}, 
      new float[] {0.0f, 0.8f, 1.0f}, 
      android.graphics.Shader.TileMode.CLAMP); 
     Paint paint = new Paint(); 
     paint.setShader(gradient); 

     Bitmap bitmap = Bitmap.createBitmap(size, size, Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     canvas.drawCircle(size/2, size/2, size/2, paint); 

     // Scale the bitmap, creating an oval 
     bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); 

     return bitmap; 
    } 

示例圖像(它是橢圓形的 「月亮」,在左上角):

Oval circle overlayed on demoscene awesomeness

爲大家加分誰承認,背景圖像。

+1

[Lifeforce](http://www.pouet.net/prod.php?which=31571) – Jens 2012-03-31 11:21:19

+0

非常感謝您的幫助,但我需要圍繞已創建的位圖創建羽毛(A裁剪位圖)。這是我使用:位圖croppedImage = Bitmap.createBitmap(寬度,高度,Bitmap.Config.ARGB_8888);畫布畫布=新帆布(裁剪圖像); Rect dstRect = new Rect(0,0,width,height); canvas.drawBitmap(initialBitmap,r,dstRect,null); finnaly for cropping:Path p = mCrop.getCropPath(); Canvas c = new Canvas(croppedImage); c.clipPath(p,Region.Op.DIFFERENCE); c.drawColor(0x00000000,PorterDuff.Mode.CLEAR); – cataHHH 2012-03-31 15:01:28

+0

對不起,我不知道它是多麼清晰......我試圖爲CroppedImage添加各種Paint效果,但我從未注意到它的任何邊緣。 – cataHHH 2012-03-31 15:02:53

相關問題