Android使用多种颜色的扫描渐变在自定义视图中绘制圆弧

时间:2016-07-03 21:37:27

标签: android android-canvas android-custom-view

我正在尝试绘制一个自定义视图,其中有一个Arc将填充4种颜色的渐变,我选择SweepGradient适合这个,当我尝试它可以正常工作两种颜色,即使添加更多的颜色我我无法得到另外两种颜色。我尝试了不同的职位组合,似乎没有任何工作。

         int colorRes[] = {R.color.yellow, R.color.green,R.color.oragne, R.color.red};    
         float stops[] = {0,0.3f,0.6f,1};
         int colors[]  = new int[colorRes.length];
            for(int i=0;i<colorRes.length;i++){
                colors[i]= context.getResources().getColor(colorRes[i]);
            }
        Shader gradient = new SweepGradient (wdith/2,height/2, colors, stops));
        lighted.setShader(gradient);
        canvas.drawArc(rectf, 130, 280, false, lightRed);

2 个答案:

答案 0 :(得分:0)

我有类似的问题。我之间发生这种情况的原因是 - 宽度和高度为0。

所以实际上这样做 -

new SweepGradient (wdith/2,height/2, colors, stops));

我得到了这个 -

new SweepGradient (0,0, colors, stops));

所以要确保宽度和高度不是0,我这样做了 -

@Override
    public void onDraw(Canvas canvas) {
        if (mShader == null) {
            float cX = getWidth() / 2F;
            float cY = getHeight() / 2F;
            mShader = new SweepGradient(cX, cY, getRingColors(), null);
        }
        testPaint1.setShader(mShader);
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, getResources().getDimensionPixelSize(R.dimen.status_ring_dimen), testPaint1);
    }



private int[] getRingColors() {
        return new int[]{
                getResources().getColor(R.color.md_blue_500),
                getResources().getColor(R.color.md_red_400),
                getResources().getColor(R.color.md_green_500),
                getResources().getColor(R.color.md_blue_500) 
// the first and last color should be the same to get a smooth transition of colors

        };
    }

答案 1 :(得分:0)

对我来说,实际问题是由于Android Studio中的一个错误尚未修复。

请查看报告的问题here

在Android Studio中,布局预览中的SweepGradient渲染失败,而在实际设备中它的工作正常。

我意识到在真实设备中测试自定义视图总是很好。