我想制作一个自定义圆形按钮,如 自定义圆形按钮中所述我也想在执行操作后更改此圆形按钮的颜色。这个按钮会打开一个颜色选择器,然后我想要的是将选择的颜色放入按钮中。
最好的选择是如何做到这一点,创建一个 xml 可绘制对象,然后将颜色引用到一个变量或类似的东西,或者创建一个覆盖 onDraw 的按钮的子类,然后绘制一个圆圈,并且可以轻松更改圆圈的颜色?
我想制作一个自定义圆形按钮,如 自定义圆形按钮中所述我也想在执行操作后更改此圆形按钮的颜色。这个按钮会打开一个颜色选择器,然后我想要的是将选择的颜色放入按钮中。
最好的选择是如何做到这一点,创建一个 xml 可绘制对象,然后将颜色引用到一个变量或类似的东西,或者创建一个覆盖 onDraw 的按钮的子类,然后绘制一个圆圈,并且可以轻松更改圆圈的颜色?
为了创建一个可以以编程方式更改其颜色的圆形按钮,我创建了一个 View 的子类,然后我重写了 onDraw 方法以包含方法 drawCircle()。为了在另一个类中更改颜色,我创建了更改油漆颜色的方法 changeColor(int),然后绘制另一个圆圈并 invalidate() 视图以再次创建 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();
}
}