zoukankan      html  css  js  c++  java
  • 多点触摸

    https://blog.csdn.net/lijinweii/article/details/77717540

    GestureDetector        ScaleGestureDetector

    @Override
        public boolean onTouch(View v, MotionEvent event) {
    
            if (mGestureDetector.onTouchEvent(event))
                return true;
            mScaleGestureDetector.onTouchEvent(event);
    
            float x = 0, y = 0;
            // 拿到触摸点的个数
            final int pointerCount = event.getPointerCount();
            // 得到多个触摸点的x与y均值
            for (int i = 0; i < pointerCount; i++) {
                x += event.getX(i);
                y += event.getY(i);
            }
            x = x / pointerCount;
            y = y / pointerCount;
    
            /**
             * 每当触摸点发生变化时,重置mLasX , mLastY
             */
            if (pointerCount != lastPointerCount) {
                isCanDrag = false;
                mLastX = x;
                mLastY = y;
            }
    
            lastPointerCount = pointerCount;
            RectF rectF = getMatrixRectF();
    
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if (rectF.width() > getWidth() || rectF.height() > getHeight()) {
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (rectF.width() > getWidth() || rectF.height() > getHeight()) {
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                    Log.e(TAG, "ACTION_MOVE");
                    float dx = x - mLastX;
                    float dy = y - mLastY;
    
                    if (!isCanDrag) {
                        isCanDrag = isCanDrag(dx, dy);
                    }
                    if (isCanDrag) {
    
                        if (getDrawable() != null) {
                            // if (getMatrixRectF().left == 0 && dx > 0)
                            // {
                            // getParent().requestDisallowInterceptTouchEvent(false);
                            // }
                            //
                            // if (getMatrixRectF().right == getWidth() && dx < 0)
                            // {
                            // getParent().requestDisallowInterceptTouchEvent(false);
                            // }
                            isCheckLeftAndRight = isCheckTopAndBottom = true;
                            // 如果宽度小于屏幕宽度,则禁止左右移动
                            if (rectF.width() < getWidth()) {
                                dx = 0;
                                isCheckLeftAndRight = false;
                            }
                            // 如果高度小雨屏幕高度,则禁止上下移动
                            if (rectF.height() < getHeight()) {
                                dy = 0;
                                isCheckTopAndBottom = false;
                            }
    
                            //设置偏移量
                            mScaleMatrix.postTranslate(dx, dy);
                            //再次校验
                            checkMatrixBounds();
                            setImageMatrix(mScaleMatrix);
                        }
                    }
                    mLastX = x;
                    mLastY = y;
                    break;
    
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    Log.e(TAG, "ACTION_UP");
                    lastPointerCount = 0;
                    break;
            }
            return true;
        }
  • 相关阅读:
    Linux之cd、pwd、mkdir、rmdir
    Linux之目录结构配置
    Linux之chgrp
    Linux之chown
    Linux之chmod
    Linux之用户组、文件权限详解
    Linux命令之shutdown
    Linux命令之man
    Git-.gitignore配置
    Linux内核移植到JZ2440
  • 原文地址:https://www.cnblogs.com/genggeng/p/9963845.html
Copyright © 2011-2022 走看看