OnTouchListener和OnCliskListener

单击事件很简单,这里只说一个问题:isPressed()方法。

  1. /**
  2. *点击事件
  3. *
  4. *@authormark
  5. *
  6. */
  7. finalclassClickListenerimplementsOnClickListener{
  8. @Override
  9. publicvoidonClick(Viewv){
  10. switch(v.getId()){
  11. caseBTN:
  12. if(v.isPressed()){
  13. btn.setText("单击按钮成功!");
  14. }else{
  15. btn.setBackgroundColor(Color.BLUE);
  16. }
  17. /*if(!v.isPressed()){
  18. btn.setBackgroundColor(Color.BLUE);
  19. }*/
  20. break;
  21. }
  22. }
  23. }

点击Button可以触发该事件,if (v.isPressed()) 下面的代码可以执行,但是如 else 后面的或者注释掉的 if(! v.isPressed()) 代码不会被执行。

如果你想捕捉Button的按下与弹起的动作,需要实现OnTouchListener接口。最后再说这个问题

在开发中需要将长按事件如单击事件一起使用,现在我们去实现。写长按事件的代码:

  1. /**
  2. *长按事件
  3. *
  4. *@authormark
  5. *
  6. */
  7. finalclassLongListenerimplementsOnLongClickListener{
  8. @Override
  9. publicbooleanonLongClick(Viewv){
  10. btn.setText("长按按钮成功!");
  11. returnfalse;
  12. }
  13. }
为Button设置事件监听:

  1. btn.setOnClickListener(newClickListener());
  2. btn.setOnLongClickListener(newLongListener());
运行之后会发现,长按该Button不仅可以触发长按事件,而且还会触发单击事件,怎么办?

很简单,那就是在OnLongClickListener 事件中处理事件之后,告诉其它事件(这里是单击事件onClick)不要再来参与即可。修改代码如下:

  1. /**
  2. *长按事件
  3. *
  4. *@authormark
  5. *
  6. */
  7. finalclassLongListenerimplementsOnLongClickListener{
  8. @Override
  9. publicbooleanonLongClick(Viewv){
  10. btn.setText("长按按钮成功!");
  11. //returnfalse;
  12. returntrue;
  13. }
  14. }

可以看出,单击事件与长按事件分开了。
最后,我们讨论一下如何捕捉Button 的按下与弹起事件。实现代码:

  1. /**
  2. *触摸事件
  3. *
  4. *@authormark
  5. *
  6. */
  7. finalclassTouchListenerimplementsOnTouchListener{
  8. @Override
  9. publicbooleanonTouch(Viewv,MotionEventevent){
  10. if(event.getAction()==KeyEvent.ACTION_DOWN){
  11. btn.setText("已经按下按钮");
  12. }
  13. if(event.getAction()==KeyEvent.ACTION_UP){
  14. btn.setText("按钮已经弹起");
  15. }
  16. returntrue;//返回true的话,单击事件、长按事件不可以被触发
  17. //returnfalse;
  18. }
  19. }
完整代码实例:

  1. packagemark.zhang;
  2. importandroid.app.Activity;
  3. importandroid.graphics.Color;
  4. importandroid.os.Bundle;
  5. importandroid.util.Log;
  6. importandroid.view.Gravity;
  7. importandroid.view.KeyEvent;
  8. importandroid.view.MotionEvent;
  9. importandroid.view.View;
  10. importandroid.view.View.OnClickListener;
  11. importandroid.view.View.OnLongClickListener;
  12. importandroid.view.View.OnTouchListener;
  13. importandroid.widget.Button;
  14. importandroid.widget.LinearLayout;
  15. publicclassTestActivityextendsActivity{
  16. privatestaticfinalintBTN=0x10;
  17. privateButtonbtn=null;
  18. @Override
  19. publicvoidonCreate(BundlesavedInstanceState){
  20. super.onCreate(savedInstanceState);
  21. //必须先装载该布局文件,否则报空指针异常
  22. setContentView(R.layout.main);
  23. LinearLayoutll=(LinearLayout)findViewById(R.id.ll);
  24. //布局参数设定
  25. LinearLayout.LayoutParamslp=newLinearLayout.LayoutParams(120,50);
  26. lp.gravity=Gravity.CENTER;
  27. //创建Button并设置参数
  28. btn=newButton(this);
  29. btn.setText("Clickme");
  30. btn.setId(BTN);
  31. btn.setLayoutParams(lp);
  32. //加入当前视图
  33. ll.addView(btn);
  34. //为Button设置监听器
  35. btn.setOnClickListener(newClickListener());
  36. btn.setOnTouchListener(newTouchListener());
  37. btn.setOnLongClickListener(newLongListener());
  38. }
  39. /**
  40. *点击事件
  41. *
  42. *@authormark
  43. *
  44. */
  45. finalclassClickListenerimplementsOnClickListener{
  46. @Override
  47. publicvoidonClick(Viewv){
  48. switch(v.getId()){
  49. caseBTN:
  50. if(v.isPressed()){
  51. btn.setText("单击按钮成功!");
  52. Log.d("mark","onclick");
  53. }else{
  54. btn.setBackgroundColor(Color.BLUE);
  55. }
  56. /*
  57. *if(!v.isPressed()){btn.setBackgroundColor(Color.BLUE);}
  58. */
  59. break;
  60. }
  61. }
  62. }
  63. /**
  64. *长按事件
  65. *
  66. *@authormark
  67. *
  68. */
  69. finalclassLongListenerimplementsOnLongClickListener{
  70. @Override
  71. publicbooleanonLongClick(Viewv){
  72. btn.setText("长按按钮成功!");
  73. //returnfalse;
  74. returntrue;
  75. }
  76. }
  77. /**
  78. *触摸事件
  79. *
  80. *@authormark
  81. *
  82. */
  83. finalclassTouchListenerimplementsOnTouchListener{
  84. @Override
  85. publicbooleanonTouch(Viewv,MotionEventevent){
  86. if(event.getAction()==KeyEvent.ACTION_DOWN){
  87. btn.setText("已经按下按钮");
  88. }
  89. if(event.getAction()==KeyEvent.ACTION_UP){
  90. btn.setText("按钮已经弹起");
  91. }
  92. returntrue;//返回true的话,单击事件、长按事件不可以被触发
  93. //returnfalse;
  94. }
  95. }
  96. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值