Android:只允许自定义视图的某些部分可点击

时间:2017-08-14 19:55:09

标签: android android-custom-view

我有一个自定义视图,假设它看起来像这样:

My Custom View

我希望我的自定义视图能够响应onClicks,但问题是我希望它只响应红色部分/圆圈上的点击。不是整个观点。

是否可以使上面的文字和灰色部分不可点击?

谢谢。

2 个答案:

答案 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做了自定义查看处理操作。