Android框架 ImageButton如何实现 按住和松开时的事件

不是点击,也不是焦点,是按住和松开。... 不是点击,也不是焦点,是按住和松开。 展开
 我来答
QQMSD8
2015-09-19 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部

这个可以用onTouch来实现,touch事件有手指按下,移动,放开的相关api。

关于Touch事件的说明:

1.关于事件构成

在Android中,事件主要包括点按、长按、拖拽、滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作。所有这些都构成了Android中的事件响应。总的来说,所有的事件都由如下三个部分作为基础:

1.按下(ACTION_DOWN)

2.移动(ACTION_MOVE)

3.抬起(ACTION_UP)

所有的操作事件首先必须执行的是按下操作(ACTIONDOWN),之后所有的操作都是以按下操作作为前提,当按下操作完成后,接下来可能是一段移动(ACTIONMOVE)然后抬起(ACTION_UP),或者是按下操作执行完成后没有移动就直接抬起。这一系列的动作在Android中都可以进行控制。


2.事件的处理API

在View和ViewGroup中都存在dispatchTouchEvent和onTouchEvent方法,但是在ViewGroup中还有一个onInterceptTouchEvent方法,在Android中,所有的事件都是从开始经过传递到完成事件的消费,这些方法的返回值就决定了某一事件是否是继续往下传,还是被拦截了,或是被消费了。

public boolean dispatchTouchEvent(MotionEvent event)
public boolean onTouchEvent(MotionEvent event) 
public boolean onInterceptTouchEvent(MotionEvent event)


3.事件处理API的说明

  1. dispatchTouchEvent方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发,然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发,事件没有被消费。返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。

  2. onTouchEvent方法用于事件的处理,返回true表示消费处理当前事件,返回false则不处理,交给子控件进行继续分发。

  3. onInterceptTouchEvent是ViewGroup中才有的方法,View中没有,它的作用是负责事件的拦截,返回true的时候表示拦截当前事件,不继续往下分发,交给自身的onTouchEvent进行处理。返回false则不拦截,继续往下传。

启帆信息
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!... 点击进入详情页
本回答由启帆信息提供
易宪匮门5U
2009-10-19
知道答主
回答量:16
采纳率:0%
帮助的人:22.5万
展开全部
按住和松开的事件 分为两种情况:
(1)是手机上键盘的按键按住和松开事件:onKey()

imageButton.setOnKeyListener(imageKeyListener);//为imagebutton设置按键响应事件

private OnKeyListener imageKeyListener = new OnKeyListener() {

public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {

case KeyEvent.ACTION_UP:
{
/按住事件发生后执行代码的区域
}
case KeyEvent.ACTION_DOWN:
{
//松开事件发生后执行代码的区域
}
default:

break;
}
return false;
}
};

(2)直接在触摸屏进行按住和松开事件的操作:onTouch()
imageButton.setOnTouchListener(imageButtonTouchListener);
private OnTouchListener imageButtonTouchListener = new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:
{
//按住事件发生后执行代码的区域
break;
}
case MotionEvent.ACTION_MOVE:
{
//移动事件发生后执行代码的区域
break;
}
case MotionEvent.ACTION_UP:
{
//松开事件发生后执行代码的区域
break;
}

default:

break;
}
return false;
}
};
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssh99999ssh
2009-10-19 · TA获得超过389个赞
知道小有建树答主
回答量:719
采纳率:50%
帮助的人:257万
展开全部
用鼠标监听类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式