2

我有自己的切换按钮:

@Override
public boolean onTouchEvent(MotionEvent event) {

    super.onTouchEvent(event);

if (event.getAction() == MotionEvent.ACTION_MOVE) {

        if (event.getY() >= getHeight()) {
            if(isChecked()) {
                this.setChecked(true);
                this.performClick();
            }
        } else if (event.getY() <= 0) {
            if(!isChecked()) {
                this.setChecked(false);
                this.performClick();
            }
        }
    }
    return true;
}

我想检测用户是否将手指放在我的切换按钮上并进行更改。但如果用户在控件外部按下手指,我无法检测到 onTouchEvent。有哪些解决方案?

4

1 回答 1

0

您可以注册OnTouchListener您的视图:

mOnTouchListener = new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            final int action = motionEvent.getAction();
            boolean ret = false;

            switch (action) {
            case MotionEvent.ACTION_DOWN:
                ret = ...;
                break;
            case MotionEvent.ACTION_MOVE:
                ret = ...;
                break;
            case MotionEvent.ACTION_UP:
                ret = ...;
                break;
            }

            return ret;
        }
    };      

方法返回的onTouch(View view, MotionEvent motionEvent)内容定义了任何其他 OnTouchListener() 必须审核此事件或否。您可以看到这个问题

编辑
创建twoOnTouchListener() 类并注册每个类以观察它的运动事件。(一个用于您的button,一个用于它的parent)。返回类trueonTouch方法来审核您的按钮运动事件,因此只有此类审核按钮的运动事件而不是父级听众。

于 2012-07-19T09:02:15.113 回答