2012-03-31 74 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

相关问题