【发布时间】:2013-10-06 10:50:00
【问题描述】:
我制作了一个自定义视图 - 它扩展了 View。在onDraw() 方法中,我创建了一个具有设定半径的圆。目前在我的 xml 中,我将 layout_width 和 layout_height 设置为 wrap_content。圆圈大小合适,但是当我设置onClickListener 时,我不必触摸圆圈即可注册。我可以在没有其他视图的地方点按。
我想我需要对onMeasure 或LayoutParams 做点什么,但我不知道具体是什么。
目标是仅当我单击layout_width 和height 仍设置为wrap_content 的圆圈时才调用onClickListener。
编辑:
这会创建一个正方形,而不是我想要的圆形。
这是我的代码:
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);
}
【问题讨论】:
-
wrap_content表示使用包装该视图内容的最小尺寸,因此您需要在onMeasure()方法中告诉 android 那些最小尺寸。 -
@Luksprog 那么我可以让
widthMeasureSpec, heightMeasureSpec等于我的圆的半径吗?编辑:是的,这行得通,但它使一个广场...... -
使用半径是您想要的基本方法,但视图可能会收到一些其他约束。视图也是一个矩形,因此您不能将其设为圆形或任何其他形状。但是,您可以覆盖它的
onTouch方法并仅在触摸在圆圈区域中注册时触发点击事件。 -
@Luksprog 我理解
onTouch()部分,但不是我不能使我的观点循环的事实。在我设置尺寸之前,这是一个很好的圆圈。 -
我已经添加了我的代码给你看。输出是正方形而不是圆形。
标签: android view android-view android-custom-view