答案 0 :(得分:2)
在自定义视图中,您可以通过覆盖android的View类的onTouchEvent
方法来处理点击。首先检查用户点击的位置是否在圆圈内。然后,通常您会对MotionEvent.ACTION_DOWN
事件提供一些反馈,以便让用户知道他们已点击过,例如突出显示该圈子。然后在MotionEvent.ACTION_UP
上,您可以调用onClick方法。
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean isTouchInCircle = checkTouchInCircle(event.getX(), event.getY());
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (isTouchInCircle) {
circleColor = highlightColor;
invalidate();
}
break;
case MotionEvent.ACTION_MOVE:
if (isTouchInCircle) {
circleColor = highlightColor;
} else {
circleColor = normalColor
}
invalidate();
break;
case MotionEvent.ACTION_UP:
if (isTouchInCircle) {
onClickCircle();
}
break;
}
return true;
}
// Circle click zone approximated as a square
private boolean checkTouchInCircle(float touchX, float touchY) {
if (touchX < circleCenterX + circleRadius
&& touchX > circleCenterX - circleRadius
&& touchY < circleCenterY + circleRadius
&& touchY > circleCenterY - circleRadius) {
return true;
} else {
return false;
}
}
答案 1 :(得分:0)
不幸的是,Carson发布的答案并不完全是我想要的,因为我的例子只是一个简单的例子,有时候实际情况要困难得多,并且检查触摸位置会很复杂(想象中的多个视图/形状)自定义视图是点击位置。)
我在自定义视图中所做的是在自定义视图的元素上按id查找视图。然后我对每个我想要点击的元素setOnClickListener(this)
而不是整个视图本身mCircle.setOnClickListener(this);
和mInput.setOnClickListener(this);
,然后为implements View.OnClickListener
做了自定义查看处理操作。