android – 为多个按钮实现onTouchListener()的单一方法

前端之家收集整理的这篇文章主要介绍了android – 为多个按钮实现onTouchListener()的单一方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图看看有没有办法创建一个方法来实现多个按钮的触摸监听器,因为我有很多按钮几乎完全相同的事情.他们所做的唯一区别是他们将通过我的sendMessage()方法发送的消息,以及按钮需要多长时间才能发送消息.如果有办法,那可能是什么?而且,为什么不能这样的工作呢?
  1. //Within onCreate Method...
  2. Button mButton = (Button) findViewbyId(R.id.three_sec_button);
  3. mButton = addTouchTimer(mButton,3,3);

电话 –

  1. private Button addTouchTimer(Button button,final int sec,final int messageNum){
  2. button.setOnTouchListener(new View.OnTouchListener() {
  3. boolean longEnough = false;
  4. long realTimeLeft = sec * 1000;
  5. @Override
  6. // This will make it so that a message is only sent if the button is held down for 3 seconds
  7. // Otherwise it won't send. It is sent during the hold down process,releasing it returns a false
  8. // value and no message is sent.
  9. public boolean onTouch(View arg0,MotionEvent arg1) {
  10. Log.d("Button","Touchy Touchy!");
  11. if(arg1.getAction() == MotionEvent.ACTION_DOWN){
  12. buttonPressTime = new CountDownTimer(realTimeLeft,1000){
  13. @Override
  14. public void onTick(long millisUntilDone){
  15. realTimeLeft = millisUntilDone;
  16. }
  17.  
  18. @Override
  19. public void onFinish() {
  20. long timeLeft = realTimeLeft;
  21. long currTime = System.currentTimeMillis();
  22. long realFinishTime = currTime + timeLeft;
  23. while(currTime < realFinishTime){
  24. currTime = System.currentTimeMillis();
  25. }
  26. longEnough = true;
  27. sendEmergencyMessage(longEnough,messageNum);
  28. }
  29. }.start();
  30. }
  31. else if(arg1.getAction() == MotionEvent.ACTION_UP){
  32. buttonPressTime.cancel();
  33. sendMessage(longEnough,messageNum);
  34. }
  35. return longEnough;
  36. }
  37. });
  38.  
  39. return button;
  40. }

为了效率,似乎必须有一种更好的方法来实现它,而不是为每个按钮实现单独的监听器.注意,sendMessage()中有一个使用布尔值的Log调用,我希望看到它被传递时的设置.这是在释放按钮期间调用它的唯一原因.

解决方法

是的你是对的,还有更好的方法.一个TouchListener,用于处理所有内容,通过id确定它是哪个按钮.
  1. void intialization(){
  2. Button m1,m2,m3,m4;
  3. ... //do initialization stuff
  4. m1.setId(1);
  5. m2.setId(2);
  6. m3.setId(3);
  7. m4.setId(4);
  8. MyTouchListener touchListener = new MyTouchListener();
  9. m1.setOnTouchListener(touchListener);
  10. m2.setOnTouchListener(touchListener);
  11. m3.setOnTouchListener(touchListener);
  12. m4.setOnTouchListener(touchListener);
  13. }
  14.  
  15. public class MyTouchListener implements OnTouchListener {
  16. @Override
  17. public boolean onTouch(View v,MotionEvent event) {
  18. switch(v.getId()){
  19. case 1:
  20. //do stuff for button 1
  21. break;
  22. case 2:
  23. //do stuff for button 2
  24. break;
  25. case 3:
  26. //do stuff for button 3
  27. break;
  28. case 4:
  29. //do stuff for button 4
  30. break;
  31. }
  32. return true;
  33. }
  34.  
  35. }

这就是你如何做到的!在这种情况下,id的数值方法非常有用.另一种方法是让您的活动在您的活动中实现OnTouchListener,然后您的代码将更加简单.

  1. public class MyActivity extends Activity implements OnTouchListener {
  2.  
  3. void initialization(){
  4. Button m1,m4;
  5. ... //do initialization stuff
  6. m1.setId(1);
  7. m2.setId(2);
  8. m3.setId(3);
  9. m4.setId(4);
  10. m1.setOnTouchListener(this);
  11. m2.setOnTouchListener(this);
  12. m3.setOnTouchListener(this);
  13. m4.setOnTouchListener(this);
  14. }
  15.  
  16. @Override
  17. public boolean onTouch(View v,MotionEvent event) {
  18. switch(v.getId()){
  19. case 1:
  20. //do stuff for button 1
  21. break;
  22. case 2:
  23. //do stuff for button 2
  24. break;
  25. case 3:
  26. //do stuff for button 3
  27. break;
  28. case 4:
  29. //do stuff for button 4
  30. break;
  31. }
  32. return true;
  33. }
  34.  
  35. }

注意:此方法也适用于OnClickListener,OnCheckedChangeListener或您将在Android视图上设置的任何其他侦听器.

猜你在找的Android相关文章