我创建了一个圆形按钮,当我调用一个函数时,它可以改变他的颜色。我想要的是创建另一个,创建相同的圆形按钮,但径向渐变从中间开始,选择颜色,当您离开圆时变为透明。如何在画布上绘制具有径向渐变的圆形?
我使用How to set gradient style to paint object?上发布的代码创建了一个类似的代码,但没有奏效。
,我试过的代码是这个porpuse是:
mPaint.setShader(new RadialGradient(0, 0, height/3, Color.BLACK, Color.TRANSPARENT, Shader.TileMode.MIRROR));
下面的类是我的圈子按钮创建一个。
public class ColorGradientCircleButton extends View{
private Paint mPaint;
private Paint mBitmapPaint;
private Bitmap mBitmap;
private Canvas mCanvas;
private int width, height;
public ColorGradientCircleButton(Context context) {
super(context);
init();
}
public ColorGradientCircleButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ColorGradientCircleButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(1);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = w;
height = h;
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mCanvas.drawCircle(w/2, h/2, h/3, mPaint);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
}
public void changeColor(int color){
mPaint.setColor(color);
mCanvas.drawCircle(width/2, height/2, height/3, mPaint);
invalidate();
}
}
嘿Grabriel。这段代码在技术上看起来很有前景。我很积极,我们可以纠正它。首先,你为什么要在'onSizeChanged'中创建一个位图?使用'andorid.graphics'创建自定义视图时,只需要直接绘制该视图的画布。你用这种方法做的事情非常昂贵而且没有必要。您应该使用给定'onDraw'的画布绘制圆。如果这还不足以解决您的问题,我会更详细地发布一些内容。 – Tom
嗨,汤姆,我创建了位图,因为我认为可以控制视图的宽度和高度。所以,我修改了视图以添加您的改进,删除了位图,但有些效果不佳。她是我的代码https://gist.github.com/galaxyfeeder/7026090 –
嗨,我明白了,我在构造函数中请求宽度和高度,但是onDraw是首先执行的,所以我要做的是请求'onDraw'中视图的高度和宽度,这里是我的实际代码,效果很好:https://gist.github.com/galaxyfeeder/7026165 –