OnTouchListener和OnCliskListener
2015-09-22 17:33
253 查看
在Android App应用中,OnTouch事件表示触摸事件,本章我们通过滑过图像获取当前位置理解其具体用法。
单击事件很简单,这里只说一个问题:isPressed()方法。
点击Button可以触发该事件,if (v.isPressed()) 下面的代码可以执行,但是如 else 后面的或者注释掉的 if(! v.isPressed()) 代码不会被执行。
如果你想捕捉Button的按下与弹起的动作,需要实现OnTouchListener接口。最后再说这个问题
在开发中需要将长按事件如单击事件一起使用,现在我们去实现。写长按事件的代码
为Button设置事件监听:
运行之后会发现,长按该Button不仅可以触发长按事件,而且还会触发单击事件,怎么办?
很简单,那就是在OnLongClickListener 事件中处理事件之后,告诉其它事件(这里是单击事件onClick)不要再来参与即可。修改代码如下:
可以看出,单击事件与长按事件分开了。
最后,我们讨论一下如何捕捉Button 的按下与弹起事件。实现代码:
完整代码实例:
单击事件很简单,这里只说一个问题:isPressed()方法。
/** * 点击事件 * * @author mark * */ final class ClickListener implements OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case BTN: if (v.isPressed()) { btn.setText("单击按钮成功!"); } else { btn.setBackgroundColor(Color.BLUE); } /*if (!v.isPressed()) { btn.setBackgroundColor(Color.BLUE); }*/ break; } } }
点击Button可以触发该事件,if (v.isPressed()) 下面的代码可以执行,但是如 else 后面的或者注释掉的 if(! v.isPressed()) 代码不会被执行。
如果你想捕捉Button的按下与弹起的动作,需要实现OnTouchListener接口。最后再说这个问题
在开发中需要将长按事件如单击事件一起使用,现在我们去实现。写长按事件的代码
/** * 长按事件 * * @author mark * */ final class LongListener implements OnLongClickListener { @Override public boolean onLongClick(View v) { btn.setText("长按按钮成功!"); return false; } }
为Button设置事件监听:
btn.setOnClickListener(new ClickListener()); btn.setOnLongClickListener(new LongListener());
运行之后会发现,长按该Button不仅可以触发长按事件,而且还会触发单击事件,怎么办?
很简单,那就是在OnLongClickListener 事件中处理事件之后,告诉其它事件(这里是单击事件onClick)不要再来参与即可。修改代码如下:
/** * 长按事件 * * @author mark * */ final class LongListener implements OnLongClickListener { @Override public boolean onLongClick(View v) { btn.setText("长按按钮成功!"); // return false; return true; } }
可以看出,单击事件与长按事件分开了。
最后,我们讨论一下如何捕捉Button 的按下与弹起事件。实现代码:
/** * 触摸事件 * * @author mark * */ final class TouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { btn.setText("已经按下按钮"); } if (event.getAction() == KeyEvent.ACTION_UP) { btn.setText("按钮已经弹起"); } return true;// 返回true的话,单击事件、长按事件不可以被触发 // return false; } }
完整代码实例:
package mark.zhang; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.View.OnTouchListener; import android.widget.Button; import android.widget.LinearLayout; public class TestActivity extends Activity { private static final int BTN = 0x10; private Button btn = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 必须先装载该布局文件,否则报空指针异常 setContentView(R.layout.main); LinearLayout ll = (LinearLayout) findViewById(R.id.ll); // 布局参数设定 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(120, 50); lp.gravity = Gravity.CENTER; // 创建Button并设置参数 btn = new Button(this); btn.setText("Click me"); btn.setId(BTN); btn.setLayoutParams(lp); // 加入当前视图 ll.addView(btn); // 为Button设置监听器 btn.setOnClickListener(new ClickListener()); btn.setOnTouchListener(new TouchListener()); btn.setOnLongClickListener(new LongListener()); } /** * 点击事件 * * @author mark * */ final class ClickListener implements OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case BTN: if (v.isPressed()) { btn.setText("单击按钮成功!"); Log.d("mark", "onclick"); } else { btn.setBackgroundColor(Color.BLUE); } /* * if (!v.isPressed()) { btn.setBackgroundColor(Color.BLUE); } */ break; } } } /** * 长按事件 * * @author mark * */ final class LongListener implements OnLongClickListener { @Override public boolean onLongClick(View v) { btn.setText("长按按钮成功!"); // return false; return true; } } /** * 触摸事件 * * @author mark * */ final class TouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { btn.setText("已经按下按钮"); } if (event.getAction() == KeyEvent.ACTION_UP) { btn.setText("按钮已经弹起"); } return true;// 返回true的话,单击事件、长按事件不可以被触发 // return false; } } }
相关文章推荐
- ZOJ.2818 Root of the Problem【开根号,水】 2015/09/22
- poj1696 凸包
- Web系统安全初识
- 【转】iOS中几种数据持久化方案:我要永远地记住你!
- ASP.NET MVC3 Model验证总结
- dos命令复制当天生成的以日期为文件名的文件
- nancy 中的json问题
- 转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- iOS开发CGD买票
- UITableView新增特性类似于qq(置顶--删除)
- 解析XML格式数据
- python2.4升级到python2.6
- [LeetCode]Valid Anagram
- 【转】使用CocoaPods管理依赖库
- CSS布局 ——从display,position, float属性谈起
- 发展新事物
- Spring ScheduledTimerTask 定时任务执行
- 2015-0922-osg学习历程9
- 排序模板(自用)
- AngularJS体验式编程系列文章