Android 手势监听demo

package com.shengfang.demo.testdemo;

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

/**
 * 实现监听上下左右滑动的事件,哪个view需要的时候直接setOnTouchListener就可以用了
 *
 */
public class GestureListener extends GestureDetector.SimpleOnGestureListener implements View.OnTouchListener {
    /** 左右滑动的最短距离 */
    private int distance = 100;
    /** 左右滑动的最大速度 */
    private int velocity = 200;

    private GestureDetector gestureDetector;

    public GestureListener(Context context) {
        super();
        gestureDetector = new GestureDetector(context, this);
    }

    /**
     * 向左滑的时候调用的方法,子类应该重写
     * @return
     */
    public boolean left(float distance) {
        return false;
    }

    /**
            * 向右滑的时候调用的方法,子类应该重写
     * @return
             */
    public boolean right(float distance) {
        return false;
    }
    /**
     * 向上滑的时候调用的方法,子类应该重写
     * @return
     */
    public boolean up(float distance) {
        return false;
    }

    /**
     * 向下滑的时候调用的方法,子类应该重写
     * @return
     */
    public boolean down(float distance) {
        return false;
    }
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                           float velocityY) {
        // TODO Auto-generated method stub
        // e1:第1个ACTION_DOWN MotionEvent
        // e2:最后一个ACTION_MOVE MotionEvent
        // velocityX:X轴上的移动速度(像素/秒)
        // velocityY:Y轴上的移动速度(像素/秒)

        // 向左滑
        if (e1.getX() - e2.getX() > distance
                && Math.abs(velocityX) > velocity) {
            left(e1.getX() - e2.getX());
        }
        if (e1.getY() - e2.getY() > distance
                && Math.abs(velocityX) > velocity) {
           up(e1.getY() - e2.getY());
        }
        // 向右滑
        if (e2.getX() - e1.getX() > distance
                && Math.abs(velocityX) > velocity) {
            right(e2.getX() - e1.getX() );
        }
        if (e2.getY() - e1.getY() > distance
                && Math.abs(velocityX) > velocity) {
            down(e2.getY() - e1.getY());
        }
        return false;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        gestureDetector.onTouchEvent(event);
        return false;
    }

    public int getDistance() {
        return distance;
    }

    public void setDistance(int distance) {
        this.distance = distance;
    }

    public int getVelocity() {
        return velocity;
    }

    public void setVelocity(int velocity) {
        this.velocity = velocity;
    }

    public GestureDetector getGestureDetector() {
        return gestureDetector;
    }

    public void setGestureDetector(GestureDetector gestureDetector) {
        this.gestureDetector = gestureDetector;
    }
}
package com.shengfang.demo.testdemo;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
   private TextView hh;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //需要监听左右滑动事件的view
        RelativeLayout view = (RelativeLayout) this.findViewById(R.id.layout);
        hh=(TextView)findViewById(R.id.hh);
        //setLongClickable是必须的
        view.setLongClickable(true);
        view.setOnTouchListener(new MyGestureListener(this));
    }

    /**
     * 继承GestureListener,重写left和right方法
     */
    private class MyGestureListener extends GestureListener {
        public MyGestureListener(Context context) {
            super(context);
        }

        @Override
        public boolean left(float distance) {
            Log.e("test", "向左滑");
            hh.setText("向左滑"+distance);
            return super.left(distance);
        }

        @Override
        public boolean up(float distance) {
            hh.setText("向上滑"+distance);
            return super.up(distance);
        }

        @Override
        public boolean down(float distance) {
            hh.setText("向下滑"+distance);
            return super.down(distance);
        }

        @Override
        public boolean right(float distance) {
            Log.e("test", "向右滑");
            hh.setText("向右滑"+distance);
            return super.right(distance);
        }
    }

}

猜你喜欢

转载自blog.csdn.net/hy1308060113/article/details/83145292