短视频系统源代码,Android手势识别判断

软件工具
0 619
package wk.demo.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
/**
 * 功能描述:自定义屏幕上下左右手势滑动 。  <br/>
 * 所有的手势 都用view 转交给 探测器 GestureDetector ,ScaleGestureDetector   <br/>
 * 它们都有完整的回调,不要自己去通过计算。   <br/>
 void scrollToLeft( );//向左   <br/>
 void scrollToRight( );//向右   <br/>
 void scrollToTop( );//向上   <br/>
 void scrollToBottom( );//向下   <br/>
 void zoomToMax( float scale);//手势放大   <br/>
 void zoomToMin( float scale);//手势缩小   <br/>
 void zoomStop( ); //停止缩小   <br/>
 void doubleClick( ); 双击   <br/>
 void onClick();  单击   <br/>
 void onLongPress();  //长按
 */
public class GestureView extends View {
    /**最小滑动距离*/
    private final int minVelocity = 5;
    /**
     * 对外的接口
     */
    public MyGestureCallBack myGestureCallBack;
    /**
     * 手势监听
     */
    private GestureDetector gestureDetector;
    /**
     * 缩放监听
     */
    private ScaleGestureDetector scaleGestureDetector = null;
 
    public GestureView(Context context) {
        super(context);
        initView(context);
    }
 
    public GestureView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }
 
 
 
    private void initView(Context context){
        gestureDetector = new GestureDetector(context, onGestureListener);
        gestureDetector.setOnDoubleTapListener(onDoubleTapListener);
        scaleGestureDetector = new ScaleGestureDetector(context, onScaleGestureListener);
    }
 
    public void setCallBack(MyGestureCallBack myGestureCallBack) {
        this.myGestureCallBack = myGestureCallBack;
    }
 
 
    private ScaleGestureDetector.OnScaleGestureListener onScaleGestureListener = new ScaleGestureDetector.OnScaleGestureListener() {
        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            float scale=detector.getScaleFactor() ;
            if(scale>1){
                myGestureCallBack.zoomToMax(scale);
            }else{
                myGestureCallBack.zoomToMin(scale);
            }
            return false;
        }
 
        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            // 一定要返回true才会进入onScale()这个函数
            return true;
        }
 
        @Override
        public void onScaleEnd(ScaleGestureDetector detector) {
            myGestureCallBack.zoomStop();
        }
    };
 
    @Override
    public boolean performClick() {
        return super.performClick();
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // 手势事件交给 Detector接管
        gestureDetector.onTouchEvent(event);
        scaleGestureDetector.onTouchEvent(event);
        performClick();
        return true;
    }
 
 
    private GestureDetector.OnDoubleTapListener onDoubleTapListener = new GestureDetector.OnDoubleTapListener() {
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            myGestureCallBack.onClick();
            return false;
        }
 
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            myGestureCallBack.doubleClick();
            return false;
        }
 
        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            // 一般可不用
            return false;
        }
    };
 
 
    private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.OnGestureListener(){
 
        @Override
        public boolean onDown(MotionEvent e) {
            // 一般可不用
            return true;
        }
 
        @Override
        public void onShowPress(MotionEvent e) {
            // 一般可不用
        }
 
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            // 一般不用
            return false;
        }
 
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
 
            if (distanceX < -minVelocity) {
                myGestureCallBack.scrollToRight( );
 
            } else if (distanceX > minVelocity) {
                myGestureCallBack.scrollToLeft( );
            } else if (distanceY < -minVelocity) {
                myGestureCallBack.scrollToBottom( );
            } else if (distanceY > minVelocity) {
                myGestureCallBack.scrollToTop( );
            }
            return true;
        }
 
        @Override
        public void onLongPress(MotionEvent e) {
            myGestureCallBack.onLongPress();
        }
 
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            if (e1.getX()  - e2.getX() > minVelocity && Math.abs(velocityX) > minVelocity) {
                myGestureCallBack.scrollToLeft();
 
            } else if ((e2.getX() - e1.getX() > minVelocity && Math.abs(velocityX) > minVelocity)) {
                myGestureCallBack.scrollToRight();
 
            } else if (e1.getY()  - e2.getY() > minVelocity && Math.abs(velocityY) > minVelocity) {
                myGestureCallBack.scrollToTop();
 
            } else if ((e2.getY() - e1.getY() > minVelocity && Math.abs(velocityY) > minVelocity)) {
                myGestureCallBack.scrollToBottom( );
            }
            return true;
        }
    };
 
    public interface MyGestureCallBack {
        /**
         * 向左
         */
        void scrollToLeft( );
 
        /**
         *  向右
         */
        void scrollToRight( );
 
        /**
         *  向上
         */
        void scrollToTop( );
 
        /**
         * 向下
         */
        void scrollToBottom( );
 
        /**
         * 手势放大
         */
        void zoomToMax( float scale);
 
        /**
         * 手势缩小
         */
        void zoomToMin( float scale);
 
        /**
         * 停止缩小
         */
        void zoomStop( );
 
        /**
         * 双击
         */
        void doubleClick( );
 
        /**
         * 单击
         */
        void onClick();
 
        /**
         * 长按
         */
        void onLongPress();
    }
 
}


精选帖子
DAWN 融资3300万美金,下一个挖矿空投大项目类似grass 268
Teneo融资上千万美元,类似小草Grass挂机项目 295
Android 标枪定位 v2.11.3 免Root实现虚拟定位 339
Windows11 轻松设置 v1.10 绿色版 250
Android 海螺问问 Ghat GPT v2.30.0 免费AI助手 301
Android 海绵音乐 v2.33 免费AI音乐软件 239
Android 换脸变装视频秀 v1.2.4 美女视频AI换脸 228
Android 配音鸭文字转语音 v1.6.0登陆解锁会员 141
Android 配音工厂 v1.0.8 解锁会员版 398
热门帖子
Android 标枪定位 v2.11.3 免Root实现虚拟定位 339
Android 海螺问问 Ghat GPT v2.30.0 免费AI助手 301
Teneo融资上千万美元,类似小草Grass挂机项目 295
DAWN 融资3300万美金,下一个挖矿空投大项目类似grass 268
Windows11 轻松设置 v1.10 绿色版 250
Android 海绵音乐 v2.33 免费AI音乐软件 239
Android 换脸变装视频秀 v1.2.4 美女视频AI换脸 228
Ai一键生成影视解说视频,仅需十秒即可完成,多平台分发,轻松日入1000+ 178
【免费V2ray安卓和电脑梯子】年度最佳免费v2ray梯子推荐_最新免费V2ray节点分享 116