Android 手势监听 长按 单击 双击 滑屏 间隔点击等等

昨天试着自己写这个长按,欲仙欲死.今天静下心来,好好地百度了一波,终于找到了.俺就是CV的命了.主要就是GestureDetector.安卓自己有提供''''

 

找到了启舰大神14年的博客

https://blog.csdn.net/harvic880925/article/details/39520901


 private class gestureListener implements GestureDetector.OnGestureListener {
        /**
         * 用户按下屏幕就会触发
         */
        @Override
        public boolean onDown(MotionEvent e) {
            return false;
        }

        /**
         * 如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,
         * 那么onShowPress就会执行,具体这个瞬间是多久,我也不清楚呃
         * 0.5-1s
         */
        @Override
        public void onShowPress(MotionEvent e) {

        }

        /**
         * 从名子也可以看出,一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,
         * 才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,
         * 所以也就不会触发这个事件
         * 触发顺序:
         * 点击一下非常快的(不滑动)Touchup:
         * onDown->onSingleTapUp->onSingleTapConfirmed
         * 点击一下稍微慢点的(不滑动)Touchup:
         * onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
         */
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Toast.makeText(MainActivity.this, "不要单击", Toast.LENGTH_SHORT).show();
            return false;
        }

        /**
         * 在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,
         * 都会多次触发,这个方法       在ACTION_MOVE动作发生时就会触发
         *     滑屏:手指触动屏幕后,稍微滑动后立即松开
         *     onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling
         *     拖动
         *     onDown------》onScroll----》onScroll------》onFiling
         *
         *     可见,无论是滑屏,还是拖动,影响的只是中间OnScroll触发的数量多少而已,
         *     最终都会触发onFling事件!
         */
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            return false;
        }

        /**
         * 长按触摸屏,超过一定时长,就会触发这个事件
         * 触发顺序:
         * onDown->onShowPress->onLongPress
         */
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onLongPress(MotionEvent event) {
            setLongPressDoing(event);
        }

        /**
         * 滑屏,用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
         * 多个ACTION_MOVE, 1个ACTION_UP触发
         *      参数解释:
         * @param e1   第1个ACTION_DOWN MotionEvent
         * @param e2   最后一个ACTION_MOVE MotionEvent
         * @param velocityX  X轴上的移动速度,像素/秒
         * @param velocityY  Y轴上的移动速度,像素/秒
         * @return
         */

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            return false;
        }
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void setLongPressDoing(MotionEvent event){
        switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:
                float x = event.getX();
                float y = event.getY();


                //按下点 距上距下
                int v1 = (int) Math.abs(bottom - y);
                float min = Math.min(v1, y);


                flag = !flag;
                if (flag) {
                    Animator animator = ViewAnimationUtils.createCircularReveal(
                            change,//作用在哪个View上面
                            (int) x,
                            (int) y,//扩散的中心点
                            min,//开始扩散初始半径
                            defaul.getWidth());//扩散结束半
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值