Bootstrap

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;
            }
        });}

;