自定义视图测量

时间:2013-10-06 10:50:00

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

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

我想我需要对onMeasureLayoutParams做点什么,但我不知道到底是什么。

我的目的是仅在点击圈子时调用onClickListener layout_widthheight仍然设置为wrap_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);

    }

1 个答案:

答案 0 :(得分:0)

试试这个:

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