OnTouchListener和OnClickListener
来源:互联网 发布:大族激光软件 编辑:程序博客网 时间:2024/05/17 03:42
单击事件很简单,这里只说一个问题: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;
- }
- }
- btn.setOnClickListener(new ClickListener());
- btn.setOnLongClickListener(new LongListener());
很简单,那就是在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;
- }
- }
- }
- OnTouchListener和OnClickListener
- 解决onTouchListener和onClickListener冲突
- CheckBox OnTouchListener、OnCheckedChangeListener和OnClickListener区别
- ListView的OnTouchListener和OnClickListener的研究
- onTouchListener和onClickListener的冲突问题
- Android中OnTouchListener和OnClickListener并存
- 浅谈OnTouchListener,OnClickListener和OnLongClickListener的关系
- OnTouchListener、OnClickListener、OnLongClickListener
- 论onclicklistener、ontouchlistener、ontouchevent
- OnTouchListener会覆盖OnClickListener
- android 中view 的OnTouchListener和OnClickListener的区别
- CheckBox的OnCheckedChangeListener、OnClickListener、OnTouchListener
- CheckBox的OnCheckedChangeListener、OnClickListener、OnTouchListener
- CheckBox的OnCheckedChangeListener、OnClickListener、OnTouchListener
- Android 事件分发 OnClickListener 和 OnTouchListener 的事件处理原理简单描述
- android对OnTouchListener、OnClickListener等事件响应
- OnTouchListener与OnClickListener冲突问题解决思路
- 安卓OnTouchListener,onTouchEvent,onClickListener执行顺序
- Java开发工具常识
- HDU1002 A + B Problem II
- linux kernel books
- 计算机算法:Strassen矩阵相乘算法
- TQ2440成功移植linux-2.6.29内核
- OnTouchListener和OnClickListener
- JDBC连接数据库步骤
- 如何让背景图片拉伸填充
- Ubuntu/环境变量:修改/etc/environment 导致开机不能登录!
- 基于Linux的嵌入式网络视频监控系统研究与设计
- 动作冒险游戏《拯救公主》
- Linux中select poll和epoll的区别
- linux下安装qt-4.5_for_TQ210_V1.0.(TQ210)-ubuntu11.10过程出现的问题
- 【操作符】 - 逻辑操作符