您的位置:首页 > 移动开发 > Android开发

view的触摸事件OnTouch与监听

2015-07-25 21:09 501 查看
转自 http://www.apkbus.com/forum.php?mod=viewthread&tid=243810&extra=
触摸,手势操作已经很好的融入了我们的生活。那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习。

onTouch事件

做什么都好先了解原理以后的工作就会更简单,关于手势以及我们熟悉的onclick,

onLongClick事件都是基于对onTouch事件的捕捉和处理。那么在使用手势工具类的前提下我们应该去学习了解基本的onTouch事件。

onTouch常用的以下4个事件:

1、ACTION_DOWN:

表示按下了屏幕,第一个执行也是必然执行的方法。

2、ACTION_MOVE:

表示为移动手势,会不断的执行直到触摸停止。

3、ACTION_UP :

表示为离开屏幕,触摸停止的时候执行。

4、ACTION_CANCEL:

表示取消手势,不会由用户产生,而是由程序产生的。

一个Action_DOWN, 多个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。

onTouch的参数

View

受到Touch事件的view对象

MotionEvent

包含的事件的详细信息,例如触摸点的信息,触摸事件类型的信息等

MotionEvent的方法例如getRowX所描述的都是触摸点的信息。

几个重要方法的说明:

getRowX:触摸点相对于屏幕的坐标

getX: 触摸点相对于view的坐标

getTop: 按钮左上角相对于父view(LinerLayout)的y坐标

getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标

onTouch的返回值

这个部分涉及到事件传递和处理机制,详细的不在此介绍。

作用:

这里的返回值代表的是,对于这个触摸事件touch是否已经处理完成。

如果我们设置返回值为true代表的是处理完成,这样就不会再传递给下一个对象。也就是说后面的控件或者对象就不会接收到触摸事件了。

反之,后面的对象或控件会在此接收到这个触摸事件并被调用。

实践

在学习基础知识之后,我们来看看如何使用这些来实现一个可以拖动的按钮吧。

思路

这里的主要思路就是在ACTION_DOWN按下的第一时间记录下初始的状态,在ACTION_MOVE滑动事件中不断的刷新按钮的位置。

为了保证有我们正常理解下的点击事件发生,下面我还加了位置是否移动的判断。

下面是实现该功能的内部类
class MyOnTouch implements OnTouchListener{

int[] temp = new int[] { 0, 0 };

Boolean ismove = false;

int downX = 0;

int downY = 0;

@Override

public boolean onTouch(View v, MotionEvent event) {

int eventaction = event.getAction();

int x = (int) event.getRawX();

int y = (int) event.getRawY();

switch (eventaction) {

case MotionEvent.ACTION_DOWN: // touch down so check if the

temp[0] = (int) event.getX();

temp[1] = y - v.getTop();

downX = (int) event.getRawX();

downY = (int) event.getRawY();

ismove = false;

break;

case MotionEvent.ACTION_MOVE: // touch drag with the ball

v.layout(x - temp[0], y - temp[1], x + v.getWidth() - temp[0], y - temp[1] + v.getHeight());

if (Math.abs(downX - x) > 10 || Math.abs(downY - y) > 10)

ismove = true;

break;

case MotionEvent.ACTION_UP:

if (!ismove)

Toast.makeText(MainActivity.this, "你点击了这个按钮", Toast.LENGTH_LONG).show();

break;

}

return false;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android OnTouchListner