使用“多点触控黑客”时,按钮表现得很奇怪

时间:2012-10-03 14:46:57

标签: android multi-touch

我正在写一个测验。我有四个按钮:答案选项,我正在使用Android multitouch! hack anyone?代码段来禁用多点触控。

但按钮似乎只有在你很快点击它们时才有效。

如果你慢慢按下按钮然后松开它,按钮只会闪烁,没有任何反应。有人可以帮我弄清楚如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

以下是一段可能有效的代码,请注意我没有时间尝试..

private static final String sClickKey = "clickkey";
private boolean mClicked;

@Override
public void onClick(View view) {

    synchronized (sClickKey){

        if (!mClicked){
            mClicked = true;
            /* do the rest here... */
        }

    }

}

使用synchronize将确保只有第一个点按的按钮才会在if(!mClicked)中输入,之后mClicked值会更改为true,因此下一个事件不会传入if语句..

我希望这有帮助! ;)

答案 1 :(得分:0)

我使用了@JQCorreia hack并且像这样覆盖了他的“onTouchEvent”:

        @Override
        public boolean onTouchEvent(MotionEvent event){
        int action = event.getAction() & MotionEvent.ACTION_MASK;

        switch (action) {
        case MotionEvent.ACTION_DOWN:
            for(View v: views){
                Rect r = new Rect();
                v.getGlobalVisibleRect(r);
                if (event.getX() > r.left && event.getX() < r.right
                        && event.getY() > r.top
                        && event.getY() < r.bottom) {
                    v.onTouchEvent(event);
                }
            }
            break;
        case MotionEvent.ACTION_UP:
            for(View v: views){
                Rect r = new Rect();
                v.getGlobalVisibleRect(r);
                if (event.getX() > r.left && event.getX() < r.right
                        && event.getY() > r.top
                        && event.getY() < r.bottom) {
                    v.onTouchEvent(event);
                }
            }
            break;
        case MotionEvent.ACTION_MOVE:
            for(View v: views){
                Rect r = new Rect();
                v.getGlobalVisibleRect(r);
                if (event.getX() > r.left && event.getX() < r.right
                        && event.getY() > r.top
                        && event.getY() < r.bottom) {
                }
                else{
                    v.onTouchEvent(event);
                }
            }
            break;
        }
        return true;
    }

这适合我。