0

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

最好的选择是如何做到这一点,创建一个 xml 可绘制对象,然后将颜色引用到一个变量或类似的东西,或者创建一个覆盖 onDraw 的按钮的子类,然后绘制一个圆圈,并且可以轻松更改圆圈的颜色?

4

1 回答 1

1

为了创建一个可以以编程方式更改其颜色的圆形按钮,我创建了一个 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();
}
}
于 2013-10-12T16:25:18.207 回答