自定义圆形按钮,以编程方式更改颜色

时间:2013-10-12 15:39:10

标签: android android-view android-button

我想制作一个自定义圆形按钮,如下所述 Custom circle button但我也希望在执行操作后更改此圆形按钮的颜色。这个按钮会打开一个颜色选择器,然后我想要的是将所选颜色放入按钮。

如何最好的选择,创建一个xml drawable,然后将颜色引用到变量或类似的东西,或创建一个按钮的子类,覆盖onDraw,然后绘制一个圆,可以更改颜色这个圈子很容易吗?

1 个答案:

答案 0 :(得分:1)

要创建一个可以以编程方式更改其颜色的圆形按钮,我创建了一个View的子类,然后我重写了onDraw方法以包含方法drawCircle()。要更改另一个类中的颜色,我创建了方法changeColor(int),它改变了颜色的颜色,然后绘制另一个圆圈并使视图无效()以再次进行onDraw。

这里是代码:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class ColorCircleButton extends View{

private Paint mPaint;
private Paint   mBitmapPaint;
private Bitmap  mBitmap;
private Canvas  mCanvas;
private int width, height;

public ColorCircleButton(Context context) {
    super(context);
    init();
}
public ColorCircleButton(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}
public ColorCircleButton(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();
}
}