Ограничение на перетаскиваемый вид на экране - PullRequest
0 голосов
/ 10 января 2019

Прямо сейчас кнопка выходит за рамки по вертикали.

Он должен двигаться только вертикально, но не выходить за пределы экрана. По горизонтали я ограничил его движение.

 @Override
   public boolean onTouch(View view, MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            dX = view.getX() - event.getRawX();
            dY = view.getY() - event.getRawY();
            lastAction = MotionEvent.ACTION_DOWN;
            break;

        case MotionEvent.ACTION_MOVE:
            view.setY(event.getRawY() + dY);
           //view.setX(event.getRawX() + dX); (restricted horizontal movement)
            lastAction = MotionEvent.ACTION_MOVE;

            break;

        case MotionEvent.ACTION_UP:
            if (lastAction == MotionEvent.ACTION_DOWN)
           break;

Я хочу добавить пользовательские ограничения на мой вид по вертикали.

1 Ответ

0 голосов
/ 10 января 2019

Вам необходимо рассчитать общий размер экрана и отслеживать начальные координаты вида при срабатывании события касания, а затем вычислить новые координаты и обновить местоположение вида на экране. Примерно так:

       @Override
       public boolean onTouch(View v, MotionEvent event) {
         switch (event.getAction()) {
           case MotionEvent.ACTION_DOWN:

                   //remember the initial position.
                   initialX = params.x;
                   initialY = params.y;

                   //get the touch location
                   initialTouchX = event.getRawX();
                   initialTouchY = event.getRawY();
                   return true;
               case MotionEvent.ACTION_UP:
                   int Xdiff = (int) (event.getRawX() - initialTouchX);
                   int Ydiff = (int) (event.getRawY() - initialTouchY);


                   //The check for Xdiff <10 && YDiff< 10 because sometime elements moves a little while clicking.
                   //So that is click event.
                   if (Xdiff < 10 && Ydiff < 10) {
                       if (isViewCollapsed()) {
                           //When user clicks on the image view of the collapsed layout,
                           //visibility of the collapsed layout will be changed to "View.GONE"
                           //and expanded view will become visible.
                           collapsedView.setVisibility(View.GONE);
                           expandedView.setVisibility(View.VISIBLE);
                       }
                   }
                   return true;
               case MotionEvent.ACTION_MOVE:
                   //Calculate the X and Y coordinates of the view.
                   params.x = initialX + (int) (event.getRawX() - initialTouchX);
                   params.y = initialY + (int) (event.getRawY() - initialTouchY);


                   //Update the layout with new X & Y coordinate
                   mWindowManager.updateViewLayout(mFloatingView, params);
                   return true;
           }
           return false;
       }

Просмотрите этот учебник, он поможет вам в применении пользовательских ограничений к представлению.

...