在android中使用圆锥形渐变的圆圈

时间:2013-08-11 10:02:12

标签: android-ui

有谁知道如何在android中设置圆锥渐变? 如下图所示:

http://www.astutegraphics.com/images/blog/tutorials/how_to_create_true_gears_18_oct_2011/29.png

1 个答案:

答案 0 :(得分:3)

当然,使用SweepGradient,然后在画布上绘制一个圆圈 可以找到一个示例here。玩得开心!

如果您不需要太多颜色,也可以通过xml:

定义它

<强> /res/drawable/sweepgradient.xml

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:a="http://schemas.android.com/apk/res/android"
        a:shape="oval"
        a:dither="true">

    <gradient a:type="sweep"
            a:startColor="#FFFF0000"
            a:centerColor="#FF0000FF"
            a:endColor="#FF00FF00" />

</shape>

SweepGradient是一个原生组件,因此您不能依赖Javas舒适的堆栈跟踪。如果出现非堆栈跟踪错误,请首先检查所有本机组件。

这是一个简单的例子:

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.SweepGradient;
    import android.view.View;

    public class GradientView extends View {

    // Edit these values as you want!
    private static int[] mColors={Color.RED, Color.GREEN, Color.BLUE};

    private Paint mPaint=new Paint();
    private boolean mSetShader=false;

    public GradientView(Context context) {
        super(context);
        mPaint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        float cX=getWidth()/2F, cY=getHeight()/2F;

        if (!mSetShader) {
            mPaint.setShader(new SweepGradient(cX, cY, mColors, null));
            mSetShader=true;
        }

        canvas.drawCircle(cX, cY, Math.min(cX, cY), mPaint);
    }

}

请注意,如果中心更改(如果视图调整大小),您可能不会重新创建SweepGradient。为了简单起见,我遗漏了额外的构造函数和onMeasure ...