用于绘制圆圈的Android自定义视图正在扩展到整个视图

时间:2014-07-08 06:00:24

标签: android android-view android-custom-view

我正在尝试编写一个绘制圆形的自定义视图,圆形绘制为椭圆形,占据屏幕宽度和高度

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);

会奏效。

1 个答案:

答案 0 :(得分:0)

首先 - 如果你想绘制一个圆,请使用drawCircle,而不是drawArc。

其次 - 你的onSizeChanged将边界矩形设置为全视图大小。如果你想要一个圆,它需要是一个正方形,所以两个半径是相等的。但更好的是,使用drawCircle。

相关问题