Различают одиночный и мультисенсорный Android - PullRequest
0 голосов
/ 04 января 2019

Я не знаю, является ли мой вопрос действительным или нет для этого форума.Заранее прошу прощения, если это не так.

Как отличить одно- и многократное касание (двумя пальцами)?

Что я хочу точно определить, так это то, что одна кнопка будет находиться в углу экрана.

Случай A: Если пользователь касается одного касания и удерживает этот вид, событие перетаскивания должно выполнить

Случай B: если пользователь выполняет многократное касание, когда два пальца удерживают экран одним пальцем на кнопке, а другой в углу противоположной стороны, должен появиться другой экран.

Приведенный ниже код, который я использовал длядля удержания на экране для случая B.

Используя приведенный ниже код, как добиться и случая A.

// touch listener which handles onLongPress(two points hold) and drag events
private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        final int displayWidth = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE))
                .getDefaultDisplay().getWidth();
        final int displayHeight = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE))
                .getDefaultDisplay().getHeight();

        // coordinates for drag listener
        float dX = 0;
        float dY = 0;

        // coordinates of first
        float firx = 0;
        float firy = 0;

        // coordinates of second
        float secx = 0;
        float secy = 0;

        Log.d(TAG, "onTouch->(Event : " + event.toString() + ")");



        // captures first touch in hold
        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
            firx = event.getX();
            firy = event.getY();
            dX = view.getX() - event.getRawX();
            dY = view.getY() - event.getRawY();
            Log.d(TAG, "1st cor:" + firx + ":" + firy);
        }

        // captures drag event
        if (event.getActionMasked() ==MotionEvent.ACTION_MOVE){
            //handleAppSwap( Math.round(dX),Math.round(event.getRawX() + dX));
            Log.d(TAG, "Drag event happens" );
        }
        // captures second touch event in hold
        if (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN && event.getActionIndex() == 0) {
            Log.d(TAG, "captures second ");
            secx = event.getX();
            secy = event.getY();
            Log.d(TAG, "2nd cor:" + secx + ":" + secy);
            mSecondFingerTimeDown = System.currentTimeMillis();
        }

        // release event  on screen corners
        if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP && event.getActionIndex() == 0) {
            if (((firx < X_OFFSET && firy < Y_OFFSET + 100) && (secx > displayWidth - X_OFFSET && secy > displayHeight - Y_OFFSET)) || ((secx < X_OFFSET && secy < Y_OFFSET) && (firx > displayWidth - X_OFFSET && firy > displayHeight - Y_OFFSET))) {
                if ((System.currentTimeMillis() - mSecondFingerTimeDown) >= 5000) {
                    Log.d(TAG, "HOLD AND RELEASE........");
                    mEngHandler.removeCallbacksAndMessages(null);
                    Message msg = mEngHandler.obtainMessage(ACTION_BOTTOM_RIGHT_RELEASE);
                    mEngHandler.sendMessage(msg);
                }
            }

        }
        return false;
    }
};

Заранее спасибо.Любая ссылка или код будет полезен

...