我正在尝试创建一个椭圆形位图,我需要在边缘处获得羽化效果,
有没有人知道如何实现这个目标?
感谢。
答案 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;
}
示例图像(左上角是椭圆形的“月亮”):
认可该背景图片的所有人的奖励积分。