1

我制作了一个自定义视图 - 它扩展了View. 在该onDraw()方法中,我创建了一个具有设定半径的圆。目前在我的 xml 中,我将layout_widthandlayout_height设置为wrap_content. 圆圈大小合适,但是当我设置一个时,onClickListener我不必触摸圆圈即可注册。我可以点击没有其他视图的任何地方。

onMeasure我想我需要用or做点什么,LayoutParams但我不知道到底是什么。

目的是仅当我单击带有且仍设置为onClickListener的圆圈时才调用。layout_widthheightwrap_content

编辑:

这会创建一个正方形而不是我想要的圆形。

这是我的代码:

protected void onDraw(Canvas canvas) {

        canvas.drawCircle(canvas.getWidth() /2 , canvas.getHeight() /2,
                RADIUS, paint);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        widthMeasureSpec = RADIUS;
        heightMeasureSpec = RADIUS;

        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);

    }
4

1 回答 1

1

尝试这个:

float mTranslateX;
float mTranslateY;
public void onDraw(Canvas canvas){
    super.onDraw(canvas);
    canvas.save();
    canvas.translate(mTranslateX, mTranslateY);
    canvas.drawCircle(0, 0, RADIUS, paint);
    canvas.restore();
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    final int dia = RADIUS * 2;
    int w = resolveSize(dia, widthMeasureSpec);
    int h = resolveSize(dia, heightMeasureSpec);
    setMeasuredDimension(w, h);
    float radius = Math.min(w, h)/2F;
    mTranslateX = radius;
    mTranslateY = radius;
}
于 2013-10-06T11:54:22.643 回答