Android触摸事件setOnTouchListener用法
1,首先需知道MotionEvent类一些参数特性
ACTION_DOWN: 表示用户开始触摸(在第一个点被按下时触发)
ACTION_MOVE: 当有点在屏幕上移动时触发,注意的是,由于灵敏度很高,所以基本上只要有点在屏幕上,此事件就会不停地被触发
ACTION_UP:表示用户抬起了手指(当屏幕上唯一的点被放开时触发)
ACTION_OUTSIDE: 表示用户触碰超出了正常的UI边界
ACTION_POINTER_UP:当屏幕上有多个点被按住,松开其中一个点时触发(非最后一个点)
getDownTime() //按下开始时间
getEvenTime()//事件结束时间
GetDownTime()-getEvenTime()//总共按下的时间
getX()//x轴坐标位置
getY()//y轴坐标位置
2,左右滑动,通过x轴正负计算左滑还是右滑
//视图滑动切换设备
private void setOnLayoutTouchListener(){
PICIMG.setOnTouchListener(new View.OnTouchListener() {
private float posX, posY,curPosX, curPosY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
posX = event.getX();
posY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
curPosX = event.getX();
curPosY = event.getY();
break;
case MotionEvent.ACTION_UP:
if ((curPosX - posX > 0) && (Math.abs(curPosX - posX) > 35)){
Log.v(TAG,"向右滑动");
position++;
show();
}
else if ((curPosX - posX < 0) && (Math.abs(curPosX-posX) > 35)){
Log.v(TAG,"向左滑动");
position--;
show();
}
break;
}
return true;
}
});}
3,也可以用作事件长按,通过控制时间长触发事件
//视图滑动切换设备
private void setOnLayoutTouchListener(){
PICIMG.setOnTouchListener(new View.OnTouchListener() {
private float posX, posY,curPosX, curPosY;
@Override
public boolean onTouch(View v, MotionEvent event) {
time = event.getEventTime()-event.getDownTime();
//如果不按压为0,按压松开之后显示时间
long time = event.getEventTime()-event.getDownTime();
//控制按多长时间触发
if((int)time>2000){
//这里处理长按保存图片
System.out.println("执行了吗");
}
return true;
}
});}