2013-09-06 6 views
2

Я столкнулся с проблемой мультитач. Проблема в том, что я могу одновременно коснуться двух кнопок на экране.

Я знаю, что этот вопрос задан несколько раз в этом форуме, и единственным решением является объявление android:splitMotionEvents="false" в вашем родительском макете. Но после объявления этого вопроса проблема остается. Это проблема с аппаратным обеспечением или с кодом? Любой указатель здесь ценится.Android Disable Multitouch on Views

+0

Вы пытались использовать android: windowEnableSplitTouch? Причина set android: windowEnableSplitTouch = "false" или андроид: splitMotionEvents = "false" для группы просмотра, в которой присутствуют кнопки. –

ответ

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(); 
      } 
     } 
    } 
0

Это то, что сработало для меня. В дополнение к установке андроида: splitMotionEvents = «ложных» на каждом ViewGroup, который содержит кнопки я вставил это в MyAdapter.getView() ...

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;