当前位置:   article > 正文

OnTouchListener和OnCliskListener_ontouchlistener 与onclicklistener

ontouchlistener 与onclicklistener

在Android App应用中,OnTouch事件表示触摸事件,本章我们通过滑过图像获取当前位置理解其具体用法。

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

  1. /**
  2. * 点击事件
  3. *
  4. * @author mark
  5. *
  6. */
  7. final class ClickListener implements OnClickListener {
  8. @Override
  9. public void onClick(View v) {
  10. switch (v.getId()) {
  11. case BTN:
  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. * @author mark
  5. *
  6. */
  7. final class LongListener implements OnLongClickListener {
  8. @Override
  9. public boolean onLongClick(View v) {
  10. btn.setText("长按按钮成功!");
  11. return false;
  12. }
  13. }

为Button设置事件监听:

  1. btn.setOnClickListener(new ClickListener());
  2. btn.setOnLongClickListener(new LongListener());

  运行之后会发现,长按该Button不仅可以触发长按事件,而且还会触发单击事件,怎么办?

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

  1. /**
  2. * 长按事件
  3. *
  4. * @author mark
  5. *
  6. */
  7. final class LongListener implements OnLongClickListener {
  8. @Override
  9. public boolean onLongClick(View v) {
  10. btn.setText("长按按钮成功!");
  11. // return false;
  12. return true;
  13. }
  14. }

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

  1. /**
  2. * 触摸事件
  3. *
  4. * @author mark
  5. *
  6. */
  7. final class TouchListener implements OnTouchListener {
  8. @Override
  9. public boolean onTouch(View v, MotionEvent event) {
  10. if (event.getAction() == KeyEvent.ACTION_DOWN) {
  11. btn.setText("已经按下按钮");
  12. }
  13. if (event.getAction() == KeyEvent.ACTION_UP) {
  14. btn.setText("按钮已经弹起");
  15. }
  16. return true;// 返回true的话,单击事件、长按事件不可以被触发
  17. // return false;
  18. }
  19. }

完整代码实例:

  1. package mark.zhang;
  2. import android.app.Activity;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.Gravity;
  7. import android.view.KeyEvent;
  8. import android.view.MotionEvent;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.View.OnLongClickListener;
  12. import android.view.View.OnTouchListener;
  13. import android.widget.Button;
  14. import android.widget.LinearLayout;
  15. public class TestActivity extends Activity {
  16. private static final int BTN = 0x10;
  17. private Button btn = null;
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. // 必须先装载该布局文件,否则报空指针异常
  22. setContentView(R.layout.main);
  23. LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
  24. // 布局参数设定
  25. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(120, 50);
  26. lp.gravity = Gravity.CENTER;
  27. // 创建Button并设置参数
  28. btn = new Button(this);
  29. btn.setText("Click me");
  30. btn.setId(BTN);
  31. btn.setLayoutParams(lp);
  32. // 加入当前视图
  33. ll.addView(btn);
  34. // 为Button设置监听器
  35. btn.setOnClickListener(new ClickListener());
  36. btn.setOnTouchListener(new TouchListener());
  37. btn.setOnLongClickListener(new LongListener());
  38. }
  39. /**
  40. * 点击事件
  41. *
  42. * @author mark
  43. *
  44. */
  45. final class ClickListener implements OnClickListener {
  46. @Override
  47. public void onClick(View v) {
  48. switch (v.getId()) {
  49. case BTN:
  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. * @author mark
  67. *
  68. */
  69. final class LongListener implements OnLongClickListener {
  70. @Override
  71. public boolean onLongClick(View v) {
  72. btn.setText("长按按钮成功!");
  73. // return false;
  74. return true;
  75. }
  76. }
  77. /**
  78. * 触摸事件
  79. *
  80. * @author mark
  81. *
  82. */
  83. final class TouchListener implements OnTouchListener {
  84. @Override
  85. public boolean onTouch(View v, MotionEvent event) {
  86. if (event.getAction() == KeyEvent.ACTION_DOWN) {
  87. btn.setText("已经按下按钮");
  88. }
  89. if (event.getAction() == KeyEvent.ACTION_UP) {
  90. btn.setText("按钮已经弹起");
  91. }
  92. return true;// 返回true的话,单击事件、长按事件不可以被触发
  93. // return false;
  94. }
  95. }
  96. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/111360
推荐阅读
相关标签
  

闽ICP备14008679号