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

不是点击,也不是焦点,是按住和松开。

这个可以用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的说明

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-19
按住和松开的事件 分为两种情况:
(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;
}
};本回答被提问者采纳
第2个回答  2009-10-19
用鼠标监听类