2012-03-26 85 views
0

我正在嘗試在我的課堂上實現onTouch,用於遠程控制mindstorms機器人。我還有很多工作要做,但現在我正在嘗試整理使用onClick的直接控制。 5個按鈕,5個實例,如下面的代碼,它調用包含機器人移動指令的5種方法之一。OnClick風格的OnClick

編輯: 活動有5個按鈕,每個按鈕都有所不同。原始類使用onClickListener,如下所示,它們將在OnCreate方法中實例化,調用具有實際代碼執行的void方法。

我想使用onTouch,因爲它使遠程...更好。但是我有一個問題試圖讓它與多個按鈕一起工作。

btn1 = (Button) findViewById(R.id.btn1);// instantiates a button called 
    // btn1 one from the xml 
    btn1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      driveFore();//move forward 

     }// calls the method 
    });// end of method 

這是原始的onClick,它調用了onCreate之外的方法。

private void driveFore() { 
    // TODO Auto-generated method stub 

    Motor.A.forward(); 
    Motor.B.forward(); 

}//Move forward 

我想要做以上的事情,但是用onTouch。實際上,一旦點擊一個按鈕,馬達就會一直持續到另一個按鈕被點擊,所以我認爲onTouch會更好,因爲只要按住一個按鈕,它就會移動。

這是onTouch變種

btn1 = (Button) findViewById(R.id.btn1); 
    btn1.setOnTouchListener(this); 

一個偵聽

public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
      Motor.A.forward(); 
      Motor.B.forward(); 
      break; 
    case MotionEvent.ACTION_UP:{ 

      Motor.A.flt(); 
      Motor.B.flt(); 
    } 
    break; 
} 
    return true; 
} 

上面的代碼工作,但只有1個按鈕。我將如何去應用上述多達5個按鈕。

編輯: 作爲建議我使用這兩種方法的嘗試:

  btn1 = (Button) findViewById(R.id.btn1); 
     btn1.setOnTouchListener(new OnTouchListener(){ 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Motor.A.forward(); 
       Motor.B.forward(); 
       break; 
      case MotionEvent.ACTION_UP: 
       Motor.A.flt(); 
       Motor.B.flt(); 
      } 
      return true; 

     } 
    }); 


    btn2 = (Button) findViewById(R.id.btn2); 
    btn2.setOnTouchListener(new OnTouchListener(){ 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Motor.A.forward(); 
       Motor.B.forward(); 
       break; 
      case MotionEvent.ACTION_UP: 
       Motor.A.flt(); 
       Motor.B.flt(); 
      } 
      return true; 
     } 
    }); 

工作就好了。多謝你們。

+0

你是什麼意思,它只適用於1按鈕?你有沒有嘗試設置多個聽衆? – keyser 2012-03-26 20:47:03

+0

onTouch偵聽器已設置爲btn1。我有一個問題將公共布爾ontouch方法放入一個可以調用的方法,因爲它會與onClick – TroothHertz 2012-03-26 20:50:14

+0

我仍然不完全瞭解問題,謝謝。 – keyser 2012-03-26 21:01:11

回答

1

您不需要讓Activity擴展OnTouchListener。你可以用匿名內部類來做同樣的事情。像這樣:

btn1.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      Motor.A.forward(); 
      Motor.B.forward(); 
      break; 
     case MotionEvent.ACTION_UP: 
      Motor.A.flt(); 
      Motor.B.flt(); 
     } 
    } 
}); 

btn2.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View v, MotionEvent event) { 
     // Something else here 
    } 
}); 
+0

+ return語句? – TroothHertz 2012-03-26 20:58:58

+0

對,對不起。返回是一個布爾值,它告訴觸摸事件是否在這裏被處理。如果您返回false,它會嘗試將觸摸起泡甚至到達下一個級別元素。 – CaseyB 2012-03-26 21:01:00