我創建了一個圓形按鈕,當我調用一個函數時,它可以改變他的顏色。我想要的是創建另一個,創建相同的圓形按鈕,但徑向漸變從中間開始,選擇顏色,當您離開圓時變爲透明。如何在畫布上繪製具有徑向漸變的圓形?
我使用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 –