Android Canvas 绘制不规则曲线渐变透明效果
在Android开发中,可以通过自定义Drawable和Shader来实现在canvas上绘制一个不规则曲线,并使两端逐渐透明,中间完全不透明。下面是一个示例代码:
public class CustomDrawable extends Drawable {
private Paint paint;
private Path path;
public CustomDrawable() {
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLACK);
path = new Path();
}
@Override
public void draw(@NonNull Canvas canvas) {
canvas.drawPath(path, paint);
}
@Override
public void setAlpha(int alpha) {
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
paint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
int width = bounds.width();
int height = bounds.height();
path.reset();
path.moveTo(0, height / 2); // 起始点
path.cubicTo(width / 4, 0, width * 3 / 4, height, width, height / 2); // 控制点
path.lineTo(width, height); // 终点
path.lineTo(0, height); // 返回起始点
Shader shader = new LinearGradient(0, 0, 0, height,
new int[]{Color.TRANSPARENT, Color.BLACK, Color.TRANSPARENT},
new float[]{0, 0.5f, 1}, Shader.TileMode.CLAMP);
paint.setShader(shader);
}
}
然后,你可以在自定义的View中使用这个Drawable来绘制曲线:
public class MyView extends View {
private CustomDrawable drawable;
public MyView(Context context) {
super(context);
init();
}
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
drawable = new CustomDrawable();
setBackground(drawable);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
drawable.setBounds(0, 0, w, h);
}
}
在这个示例中,我们自定义了一个Drawable类CustomDrawable,并在onBoundsChange()方法中设置了曲线的路径和渐变Shader。然后,在自定义的View类MyView中使用这个Drawable作为背景。你可以将MyView添加到你的布局文件中,或者通过代码将其添加到某个容器中。
原文地址: https://www.cveoy.top/t/topic/zYP 著作权归作者所有。请勿转载和采集!