在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添加到你的布局文件中,或者通过代码将其添加到某个容器中。

Android Canvas 绘制不规则曲线渐变透明效果

原文地址: https://www.cveoy.top/t/topic/zYP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录