如何在Android中实现羽化效果?

时间:2012-03-31 08:43:06

标签: android

我正在尝试创建一个椭圆形位图,我需要在边缘处获得羽化效果,

有没有人知道如何实现这个目标?

感谢。

1 个答案:

答案 0 :(得分: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

认可该背景图片的所有人的奖励积分。