2015-09-19 · 知道合伙人软件行家
这个可以用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)是手机上键盘的按键按住和松开事件: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;
}
};