zoukankan      html  css  js  c++  java
  • Android 通过onTouchEvent判断是否为双击事件

    通过onTouchEvent判断是否为双击事件,通过前面一次up 跟本次down之间的时间差,并且点击的点的坐标偏移来确定是否为双击事件DOUBLE_TAP_TIMEOUT。

            boolean isMove = false;
            private final int DOUBLE_TAP_TIMEOUT = 200;
            private MotionEvent mCurrentDownEvent;
            private boolean mDoubleTapEnabled = false;
            private MotionEvent mPreviousUpEvent;
            @Override
            public void onTouchEvent(MotionEvent event) {
                Log.e(LOG_TAG, "MotionEvent="+ event.getAction()+",isMove="+isMove);
                Log.e(LOG_TAG, "mPreviousUpEvent="+ mPreviousUpEvent+",mCurrentDownEvent="+mCurrentDownEvent);
                if (event.getAction() == MotionEvent.ACTION_MOVE) {                
                    isMove = true;
                }
                else if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if (mPreviousUpEvent != null && mCurrentDownEvent != null 
                            && isConsideredDoubleTap(mCurrentDownEvent, mPreviousUpEvent, event)
                            ) {
                        if (mDoubleTapEnabled && Environment.getExternalStorageState().equals("mounted")) {                        
                            Toast.makeText(getApplicationContext(), getResources().getString(R.string.double_click), Toast.LENGTH_LONG).show();
                            
                        }
                    }
                    mCurrentDownEvent = MotionEvent.obtain(event);
                }else if (event.getAction() == MotionEvent.ACTION_UP){
                    mPreviousUpEvent = MotionEvent.obtain(event);
                    isMove = false;
                }
            }
            private boolean isConsideredDoubleTap(MotionEvent firstDown, MotionEvent firstUp, MotionEvent secondDown){
                if (secondDown.getEventTime() - firstUp.getEventTime() > DOUBLE_TAP_TIMEOUT) {
                    return false;
                }        
                int deltaX =(int) firstUp.getX() - (int)secondDown.getX();
                int deltaY =(int) firstUp.getY()- (int)secondDown.getY();             
                return deltaX * deltaX + deltaY * deltaY < 10000;
            }
  • 相关阅读:
    Mac 上 Go 语言的安装以及编辑器的配置
    【Go学习】立Flag
    python 使用多线程同时执行多个函数
    python闭包
    mfs环境搭建之元数据服务器(master)节点安装-2
    mfs分布式文件系统介绍-01
    vscode中vim插件对ctrl键的设置
    文本截取{}的内容,生成新数组
    如何过滤a数组中b数组存在的值
    js动态加载js文件
  • 原文地址:https://www.cnblogs.com/renhui/p/9480948.html
Copyright © 2011-2022 走看看