You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否为XYSeriesRenderer区域及FillOutsideLine设置渐变填充色?

为XYSeriesRenderer.FillOutsideLine设置渐变填充

默认的XYSeriesRenderer.FillOutsideLine仅支持纯色填充,要实现渐变效果,需要自定义Renderer子类,重写填充逻辑并使用渐变画笔替代纯色画笔。

实现步骤

  1. 自定义XYSeriesRenderer子类,创建渐变着色器(LinearGradient)分别对应BOUNDS_ABOVE和BOUNDS_BELOW区域。
  2. 重写drawFillOutsideLine方法,在填充路径前切换为对应的渐变画笔,填充后恢复原画笔状态。

代码示例

public class GradientXYSeriesRenderer extends XYSeriesRenderer {
    // 定义BOUNDS_ABOVE的蓝色渐变、BOUNDS_BELOW的红色渐变
    private LinearGradient aboveGradient;
    private LinearGradient belowGradient;

    public GradientXYSeriesRenderer() {
        // 纵向渐变:从顶部浅色调到底部深色调
        aboveGradient = new LinearGradient(0, 0, 0, 1,
                new int[]{0xFF87CEEB, 0xFF1E90FF}, // 浅蓝到深蓝
                new float[]{0f, 1f},
                Shader.TileMode.CLAMP);

        belowGradient = new LinearGradient(0, 0, 0, 1,
                new int[]{0xFFF5C6CB, 0xFFDC143C}, // 浅红到深红
                new float[]{0f, 1f},
                Shader.TileMode.CLAMP);
    }

    @Override
    protected void drawFillOutsideLine(Canvas canvas, Paint paint, Path path, FillOutsideLine fillOutsideLine, List<Float> points, XYSeries series, XYChart chart) {
        // 保存原画笔的着色器,避免影响其他绘制
        Shader originalShader = paint.getShader();

        // 根据填充区域类型设置对应渐变
        if (fillOutsideLine.getType() == FillOutsideLine.Type.BOUNDS_ABOVE) {
            paint.setShader(aboveGradient);
        } else if (fillOutsideLine.getType() == FillOutsideLine.Type.BOUNDS_BELOW) {
            paint.setShader(belowGradient);
        }

        // 绘制渐变填充路径
        canvas.drawPath(path, paint);

        // 恢复原画笔状态
        paint.setShader(originalShader);
    }
}

使用方式

// 创建自定义渐变Renderer
GradientXYSeriesRenderer seriesRenderer = new GradientXYSeriesRenderer();

// 添加BOUNDS_ABOVE和BOUNDS_BELOW的填充规则
seriesRenderer.addFillOutsideLine(new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ABOVE));
seriesRenderer.addFillOutsideLine(new FillOutsideLine(FillOutsideLine.Type.BOUNDS_BELOW));

// 将Renderer添加到多系列Renderer中
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.addSeriesRenderer(seriesRenderer);

// 后续绑定数据到XYChart即可

注意事项

  • 渐变方向可通过调整LinearGradient的前四个参数修改,比如横向渐变可设置为new LinearGradient(0, 0, 1, 0, ...)。
  • 若图表坐标系有缩放或偏移,可结合chart.toRealPoint()等方法调整渐变的坐标适配,确保渐变显示位置正确。

内容的提问来源于stack exchange,提问作者Daniel Tsai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:56:03