Android日记 五种点击事件

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

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

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

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

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 编程兵书》及网络资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值