oli107 / material-range-bar

Android widget for selecting a range of values.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fixed Bug when the distance between mLeftThumb and mRightThumb is too close, click mRightThumb always make mLeftThumb be clicked.

thirtyyuan opened this issue · comments

In onActionDown() of RangeBar, add these code before if (!mRightThumb.isPressed() && mLeftThumb.isInTargetZone(x, y)) , maybe (!mLeftThumb.isPressed() || !mRightThumb.isPressed()) is unnecessary ? I haven't to concern that, if you check it, please tell me.

if ((!mLeftThumb.isPressed() || !mRightThumb.isPressed()) && mLeftThumb.isInTargetZone(x, y) && mRightThumb.isInTargetZone(x, y)) {
    if (Math.abs(x - mLeftThumb.getX()) <= Math.abs(x - mRightThumb.getX())) {
        pressPin(mLeftThumb);
    } else {
        pressPin(mRightThumb);
    }
    return;
}

And make the code like this:

private void onActionDown(float x, float y) {
        if (mIsRangeBar) {
            if ((!mLeftThumb.isPressed() || !mRightThumb.isPressed()) && mLeftThumb.isInTargetZone(x, y) && mRightThumb.isInTargetZone(x, y)) {
                if (Math.abs(x - mLeftThumb.getX()) <= Math.abs(x - mRightThumb.getX())) {
                    pressPin(mLeftThumb);
                } else {
                    pressPin(mRightThumb);
                }
                return;
            }
            if (!mRightThumb.isPressed() && mLeftThumb.isInTargetZone(x, y)) {

                pressPin(mLeftThumb);

            } else if (!mLeftThumb.isPressed() && mRightThumb.isInTargetZone(x, y)) {

                pressPin(mRightThumb);
            }
        } else {
            if (mRightThumb.isInTargetZone(x, y)) {
                pressPin(mRightThumb);
            }
        }
    }