我制作了自定义视图 - 它扩展了View
。在onDraw()
方法中,我创建了一个具有设定半径的圆。在我的xml中,我将layout_width
和layout_height
设置为wrap_content
。圆圈的大小合适,但是当我设置onClickListener
时,我不必触摸圆圈即可进行注册。我可以在没有其他视图的任何地方点按。
我想我需要对onMeasure
或LayoutParams
做点什么,但我不知道到底是什么。
我的目的是仅在点击圈子时调用onClickListener
layout_width
且height
仍然设置为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);
}
答案 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;
}