我想制作一个自定义圆形按钮,如下所述 Custom circle button但我也希望在执行操作后更改此圆形按钮的颜色。这个按钮会打开一个颜色选择器,然后我想要的是将所选颜色放入按钮。
如何最好的选择,创建一个xml drawable,然后将颜色引用到变量或类似的东西,或创建一个按钮的子类,覆盖onDraw,然后绘制一个圆,可以更改颜色这个圈子很容易吗?
答案 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();
}
}