2013-07-13 101 views
-1

我正在做一個fife應用程序。我的鼓笛有6個孔,我認爲它們是6個按鈕。正如你所知道的,在fifes中,如果你同時持有一個,兩個或更多的孔(這裏是按鈕)就會有所不同。我是Android新手,我該如何管理它?比如我想這樣做:
如果按鈕1和按鈕2在同一時間感動:玩Sound1例子
如果button6和BUTTON2在同一時間感動:玩SOUND2
如果按鈕1和按鈕2和buuton3在同一時間感動:播放聲音3



最後我用這一招:一次觸摸多個按鈕在android

one.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 

      switch(event.getAction()){ 

      case MotionEvent.ACTION_DOWN: 

       is1t = true; 
       soundtoplay(); 
       one.setBackgroundResource(R.drawable.hintedholes); 
       return true; 

      case MotionEvent.ACTION_UP: 

       is1t = false; 
       soundtoplay(); 
       one.setBackgroundResource(R.drawable.holes); 
       return true; 

      } 
      return false; 
     } 
    }); 

    two.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 

      switch(event.getAction()){ 

      case MotionEvent.ACTION_DOWN: 

       is2t = true; 
       soundtoplay(); 
       two.setBackgroundResource(R.drawable.hintedholes); 
       return true; 

      case MotionEvent.ACTION_UP: 

       is2t = false; 
       soundtoplay(); 
       two.setBackgroundResource(R.drawable.holes); 
       return true; 

      } 
      return false; 
     } 
    }); 

    three.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 

      switch(event.getAction()){ 

      case MotionEvent.ACTION_DOWN: 

       is3t = true; 
       soundtoplay(); 
       three.setBackgroundResource(R.drawable.hintedholes); 
       return true; 

      case MotionEvent.ACTION_UP: 

       is3t = false; 
       soundtoplay(); 
       three.setBackgroundResource(R.drawable.holes); 
       return true; 

      } 
      return false; 
     } 
    }); 
... 

public void soundtoplay(){ 

    if(is1t == true && is2t == false && is3t == false && is4t == false && is5t == false && is6t == false){ 


     mp = MediaPlayer.create(Playing.this, R.raw.b); 
     mp.start(); 

    }else if(is1t == true && is2t == true && is3t == false && is4t == false && is5t == false && is6t == false){ 

     mp = MediaPlayer.create(Playing.this, R.raw.a); 
     mp.start(); 

    }else if(is1t == true && is2t == true && is3t == true && is4t == false && is5t == false && is6t == false){ 

     mp = MediaPlayer.create(Playing.this, R.raw.g1); 
     mp.start(); 

    }else if ... 

回答

-1

請儘量使用波紋管代碼。

公共類MainActivity擴展活動實現OnTouchListener

{

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    findViewById(R.id.button1).setOnTouchListener(this); 
    findViewById(R.id.button2).setOnTouchListener(this); 
    findViewById(R.id.button3).setOnTouchListener(this); 
    findViewById(R.id.button4).setOnTouchListener(this); 
    findViewById(R.id.button5).setOnTouchListener(this); 
    findViewById(R.id.button6).setOnTouchListener(this); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void onToch(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.button1: 
     Log.d("TAG", "button1 click"); 
     break; 
    case R.id.button2: 
     Log.d("TAG", "button2 click"); 
     break; 
    case R.id.button3: 
     Log.d("TAG", "button3 click"); 
     break; 
    case R.id.button4: 
     Log.d("TAG", "button4 click"); 
     break; 
    case R.id.button5: 
     Log.d("TAG", "button5 click"); 
     break; 
    case R.id.button6: 
     Log.d("TAG", "button6 click"); 
     break; 

    default: 
     break; 
    } 
} 

}

0

在Android 4.1以上版本(我猜的),你可以觸發多單觸摸沒有做任何事情。但是,爲了支持較低版本,您可以使用普通的多點觸控處理方法,並處理不同的條件。檢查this了。

0

一種方法是在按鈕上設置onTouchListener而不是設置onClickListener。通過這種方式,您不必每次點擊一個按鈕就執行一次操作。
然後,您必須通過測量第一次點擊與最後一次點擊之間的時間來處理同時觸摸,並在此間隔中單擊的按鈕上進行調節。

+0

你的意思是不管我們如何觸摸它們,我們在彼此之後延遲觸摸它們?我怎麼測量點擊的時間? 例如,我必須這樣做:如果button2觸摸100毫秒後button1然後我認爲他們同時觸摸? –

+0

點擊之間的延遲取決於您的實施。您可以通過查看以下鏈接瞭解如何衡量您的第一次點擊和最終點擊之間的時間:http://stackoverflow.com/questions/12762272/android-countdowntimer-additional-milliseconds-delay-between-ticks – SAbbasizadeh