Android在视图上禁用多点触控

时间:2013-09-06 05:47:50

标签: android button view multi-touch

我正面临多点触控问题。问题是我可以同时触摸屏幕上的两个按钮。

我知道在这个论坛中多次询问过这个问题,唯一的解决办法就是在父布局中声明android:splitMotionEvents="false"。但在宣布这个问题后,问题仍然存在。它是硬件的问题还是代码?这里的任何指针都很受欢迎。

2 个答案:

答案 0 :(得分:1)

此问题似乎是因为android 4.0每个onClick都在新线程中执行。

我是如何解决的:

// 1。创建自己的点击监听器

    public abstract class AbstractCarOnClickListener {
        protected static volatile boolean processing = false;
        protected void executeBlock() {
            ActivityUtil.scheduleOnMainThread(new Runnable() {
                public void run() {
                    processing=false;
                }
            }, 400);
        }
    }

// 2。创建监听器的子类

public abstract class AppButtonsOnClickListener extends AbstractCarOnClickListener implements View.OnClickListener {

    public void onClick(View v) {
        if(processing) return;
        try{
            processing=true;            
            onCarButtonClick(v);
        } finally {
            executeBlock();
        }
    }
    public abstract void onCarButtonClick(View v);
}

// 3。将监听器设置为您的视图

    public void onClick(View v) {
         clickListener.onClick(v);
    }

    public OnClickListener clickListener = new AppButtonsOnClickListener(){
        public void onCarButtonClick(View v) {
            hintContainer.setVisibility(View.GONE);
            if (v == cancelButton) {
                listener.onCancelButtonClicked();
            }
        }
    }

答案 1 :(得分:0)

这对我有用。除了在包含我把它放在MyAdapter.getView()中的按钮的每个ViewGroup上设置android:splitMotionEvents =“false”...

    view.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View cell, MotionEvent event) {
            // Process touches only if: 1) We havent touched a cell, or 2) This event is on the touched cell
            if (mTouchedCell == null || cell.equals(mTouchedCell)) {
                int action = event.getAction();
                if (action == MotionEvent.ACTION_DOWN) {
                    cell.startAnimation(mShrink);
                    mTouchedCell = cell;
                } else if (action == MotionEvent.ACTION_CANCEL) {
                    if (cell.equals(mTouchedCell)) {
                        cell.startAnimation(mGrow);
                    }
                    mTouchedCell = null;
                    return true;
                } else if (action == MotionEvent.ACTION_UP) {
                    cell.startAnimation(mFadeOut);
                    mTouchedCell = null;
                }
                return false;
            }
            return true;
        }
    });

...当然这在适配器中......

private static View mTouchedCell = null;