Android日记 五种点击事件

来源:互联网 发布:数据存储 信息安全 编辑:程序博客网 时间:2024/06/05 03:37

点击事件主要涉及两个对象,即事件源与事件监听器

事件源:事件源指的是事件发生的控件,每个控件在不同情况下触发的事件并不都相同,而且产生的事件对象也可能不同

事件监听器:用于处理事件的对象,实现了特定的接口,根据事件的不同,重写不同的事件处理方法来处理事件

将它们联系在一起,就需要为事件源注册监听,事件发生时相应的监听器则会处理相应的事件
这里写图片描述

onClickListener 接口

该接口处理的是单击事件,该接口对应的回调方法签名如下

public void onClick(View v)

参数v:是事件源控件。

onLongClickListener 接口

该接口处理的是长按事件,该接口对应的回调方法签名如下

public boolean onLongClick(View v)

参数v:是事件源控件。
返回值:当返回true时表示已经完整的处理了这个事件,并不希望其他回调方法再次处理。返回false时表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。
返回false,允许执行其他事件。
返回true,不允许执行其他事件。

onFocusChangeListener 接口

该接口处理的是控件焦点发生改变的事件,如果注册了该接口,当某个控件失去焦点或者获得焦点时都会出发该接口中的回调方法,该接口对应的回调方法签名如下

public void onFocusChange(View v, Boolean hasFocus)

参数v:是事件源控件。
参数hasFocus:表示v的新状态,即v是否获得焦点。

onKeyListener 接口

该接口是对手机键盘进行监听的接口,通过对某个View注册监听,在该View获得焦点并有键盘事件时,便会触发该接口中的回调方法,该接口对应的回调方法签名如下

public boolean onKey(View v, int keyCode, KeyEvent event)

参数v:是事件源控件。
参数keyCode:为手机键盘的键盘码。
参数event:为键盘事件的封装类对象,其中包含了事件的详细信息,例如发生的事件、时间的类型等。
返回值:当返回true时表示已经完整的处理了这个事件,并不希望其他回调方法再次处理。返回false时表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。
返回false,允许执行其他事件。
返回true,不允许执行其他事件。

onTouchListener 接口

该接口是用来处理手机屏幕事件的监听接口,View范围内的触摸安歇、抬起或滑动等动作都会除法该事件,该接口对应的回调方法签名如下

public boolean onTouch(View v, MotionEvent event)

参数v:是事件源控件。
参数event:为键盘事件的封装类对象,其中包含了事件的详细信息,同样包括发生的事件、时间的类型等。
返回值:当返回true时表示已经完整的处理了这个事件,并不希望其他回调方法再次处理。返回false时表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。
返回false,允许执行其他事件。
返回true,不允许执行其他事件。

对于boolean返回值值得注意的是,如果没有其他事件继续进行建议返回true
这是我刚刚遇到的问题

 ImageView view = (ImageView)findViewById(id);        view.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                switch (motionEvent.getAction()) {                    case MotionEvent.ACTION_DOWN:                        view.setBackgroundColor(Color.parseColor("#66EEEEEE"));                        break;                    case MotionEvent.ACTION_UP:                        view.setBackgroundColor(Color.parseColor("#00000000"));                        break;                }                return false;//这里返回了false            }        });

想做touch时背景变暗松开后恢复的效果,发现仅执行了

case MotionEvent.ACTION_DOWN:                                          view.setBackgroundColor(Color.parseColor("#66EEEEEE"));break;

而没有执行

case MotionEvent.ACTION_UP:                        view.setBackgroundColor(Color.parseColor("#00000000"));break;

解决方法是增加onClick方法或者返回true,具体原因还不知道。。。

参考《Android 编程兵书》及网络资料

原创粉丝点击