onTouchEvent,如果用户将手指放在控制之外,则检测ACTION_MOVE

时间:2012-07-19 08:49:07

标签: android android-layout

我有自己的切换按钮:

@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;
}

我想检测用户是否将手指放在我的togglebutton上并进行更改。但是如果用户在控件外面按下手指,我就无法检测onTouchEvent。 有什么解决方案?

1 个答案:

答案 0 :(得分: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()必须审核此事件或否。您可以看到this question

修改
创建two OnTouchListener()类并注册每个类以观察它的运动事件。(一个用于button,一个用于它parent)。在{{1}中返回true类女巫的方法审核你的按钮动作事件,所以只有这个类审核按钮的动作事件而不是父母听众。