2012-10-27 56 views
2

我想要做的是處理多點觸控按鈕。我有6個按鈕,用戶可以觸摸1到6個按鈕。問題是MotionEvent最多可以處理3個指針,但我需要的是最多6個指針。請幫忙嗎?處理多點觸控

這是代碼:

public class MultitouchtestActivity extends Activity { 
    private class TouchListener implements OnTouchListener { 

     @Override 
     public boolean onTouch(final View v, final MotionEvent event) { 


      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       switch (v.getId()) { 
       case R.id.button1: 
        sqText = "Square 1 Pressed::Pointer count = " 
          + String.valueOf(event.getPointerCount()); 
        break; 
       case R.id.button2: 
        sq1Text = "Square 2 Pressed::Pointer count = " 
          + String.valueOf(event.getPointerCount()); 
        break; 
       case R.id.button3: 
        sq2Text = "Square 3 Pressed::Pointer count = " 
          + String.valueOf(event.getPointerCount()); 
        break; 
       case R.id.button4: 
        sq3Text = "Square 4 Pressed::Pointer count = " 
          + String.valueOf(event.getPointerCount()); 
        break; 
       case R.id.button5: 
        sq4Text = "Square 5 Pressed::Pointer count = " 
          + String.valueOf(event.getPointerCount()); 
        break; 
       case R.id.button6: 
        sq5Text = "Square 6 Pressed::Pointer count = " 
          + String.valueOf(event.getPointerCount()); 
        break; 
       } 

      } else if (event.getAction() == MotionEvent.ACTION_POINTER_1_DOWN) { 
       switch (v.getId()) { 
       case R.id.button1: 
        sqText = "Square 1 Pointer1Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button2: 
        sq1Text = "Square 2 Pointer1Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button3: 
        sq2Text = "Square 3 Pointer1Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button4: 
        sq3Text = "Square 4 Pointer1Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       } 
      } else if (event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN) { 
       switch (v.getId()) { 
       case R.id.button1: 
        sqText = "Square 1 Pointer2Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button2: 
        sq1Text = "Square 2 Pointer2Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button3: 
        sq2Text = "Square 3 Pointer2Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button4: 
        sq3Text = "Square 4 Pointer2Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       } 
      } else if (event.getAction() == MotionEvent.ACTION_POINTER_3_DOWN) { 
       switch (v.getId()) { 
       case R.id.button1: 
        sqText = "Square 1 Pointer3Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button2: 
        sq1Text = "Square 2 Pointer3Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button3: 
        sq2Text = "Square 3 Pointer3Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       case R.id.button4: 
        sq3Text = "Square 4 Pointer3Down::Pointer count = " 
          + String.valueOf(event.getPointerCount()) + "\n"; 
        break; 
       } 




      } 

      // TODO Auto-generated method stub 
      return true; 
     } 
    } 

    protected Button sq1; 
    protected Button sq2; 
    protected Button sq3; 
    protected Button sq4; 
    protected Button sq5; 
    protected Button sq6; 

    protected String sqText = new String(); 
    protected String sq1Text = new String(); 
    protected String sq2Text = new String(); 
    protected String sq3Text = new String(); 
    protected String sq4Text = new String(); 
    protected String sq5Text = new String(); 


    private final Handler handler = new Handler(); 

    private final Runnable mUpdateUITimerTask = new Runnable() { 
     @Override 
     public void run() { 
      // do whatever you want to change here, like: 
      updateTextField(); 
     } 
    }; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setViews(); 
     handler.postDelayed(mUpdateUITimerTask, 5000); 
    } 

    private void setViews() { 
     sq1 = (Button) findViewById(R.id.button1); 
     sq2 = (Button) findViewById(R.id.button2); 
     sq3 = (Button) findViewById(R.id.button3); 
     sq4 = (Button) findViewById(R.id.button4); 
     sq5 = (Button) findViewById(R.id.button5); 
     sq6 = (Button) findViewById(R.id.button6); 

     sq1.setOnTouchListener(new TouchListener()); 
     sq2.setOnTouchListener(new TouchListener()); 
     sq3.setOnTouchListener(new TouchListener()); 
     sq4.setOnTouchListener(new TouchListener()); 
     sq5.setOnTouchListener(new TouchListener()); 
     sq6.setOnTouchListener(new TouchListener()); 
    } 

    private void updateTextField() { 
     final TextView view1 = (TextView) findViewById(R.id.logView); 
     final TextView view2 = (TextView) findViewById(R.id.logView1); 
     final TextView view3 = (TextView) findViewById(R.id.logView2); 
     final TextView view4 = (TextView) findViewById(R.id.logView3); 
     final TextView view5 = (TextView) findViewById(R.id.logView4); 
     final TextView view6 = (TextView) findViewById(R.id.logView5); 

     // view1.append(sqText + "\n"); 
     view1.setText(sqText); 
     view2.setText(sq1Text); 
     view3.setText(sq2Text); 
     view4.setText(sq3Text); 
     view5.setText(sq4Text); 
     view6.setText(sq5Text); 

     handler.post(mUpdateUITimerTask); 
    } 
} 

回答

0

指針的數字,可與Android檢測取決於設備。一些較舊的只能檢測一個,而較現代的可能能夠檢測到更多。

如果您想在市場上發佈它,請確保您的應用程序也適用於指針較少的設備。

+1

這取決於設備。我可以同時檢測4個指針。 –

+0

所以這與硬件有關。有趣! – mhdtouban