2013-07-13 3 views
-1

Я делаю приложение для fife. У моей fife есть 6 отверстий, которые я считаю ими как 6 кнопок. Как вы знаете, в пятидесятых случаях разница в том, что вы держите одно, два или более отверстия (здесь кнопки) сразу. Я новичок в андроиде, как я могу управлять им? например, я хочу сделать это:
если button1 и button2 прикосновения одновременно: играть SOUND1
если Button6 и button2 прикосновения одновременно: играть SOUND2
если button1 и button2 и 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

Вы имеете в виду, что мы не трогаем их, мы трогаем их с задержкой друг за другом? как я могу измерить время кликов? например, я должен сделать это так: если кнопка2 коснулась после 100 миллисекунд от кнопки1, то я считаю, что они касались одновременно? –

+0

Задержка между кликами зависит от вашей реализации. Вы можете получить представление о том, как измерить время между вашим первым кликом и последним кликом, просмотрев эту ссылку: http://stackoverflow.com/questions/12762272/android-countdowntimer-additional-milliseconds-delay-between-ticks – SAbbasizadeh

Смежные вопросы