我正在尝试编写一个绘制圆形的自定义视图,圆形绘制为椭圆形,占据屏幕宽度和高度
public class BubbleView extends ViewGroup {
private Paint borderPaint,imagePaint;
private Bitmap bmp;
private long expires;
private RectF bounds = new RectF();
public BubbleView(Context context) {
super(context);
init();
}
void init(){
borderPaint = new Paint();
borderPaint.setStyle(Style.FILL_AND_STROKE);
borderPaint.setColor(getContext().getResources().getColor(R.color.green));
imagePaint = new Paint();
imagePaint.setStyle(Style.FILL);
setWillNotDraw(false);
}
void setImage(Bitmap bmp){
this.bmp = bmp;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawArc(bounds, 0, 360, true, borderPaint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
bounds = new RectF(0f, 0f,(float) w,(float) h);
invalidate();
}
}
onsidechanged方法中的某些内容并不正确,如果我将右边界和下边界设置为整数,则按预期工作。
例如
bounds = new RectF(0f, 0f,100f,100f);
会奏效。
答案 0 :(得分:0)
首先 - 如果你想绘制一个圆,请使用drawCircle,而不是drawArc。
其次 - 你的onSizeChanged将边界矩形设置为全视图大小。如果你想要一个圆,它需要是一个正方形,所以两个半径是相等的。但更好的是,使用drawCircle。