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;
            }
  • 相关阅读:
    UI: 多窗口
    UI: 标题栏
    控件 UI: 字体的自动继承的特性, Style, ControlTemplate
    控件 UI: VisualState, VisualStateManager, 控件的默认 UI
    控件 UI: StateTrigger
    atoi、stoi、strtoi区别
    python下载IGS观测数据
    稳健估计
    间接平差程序实现
    android中的文件操作详解以及内部存储和外部存储(转载)
  • 原文地址:https://www.cnblogs.com/renhui/p/9480948.html
Copyright © 2011-2022 走看看