[Android] Изображение


Answers

Вам не нужно использовать LayoutParameters для перетаскивания. Вы можете сделать это, просто установив координаты X и Y вида. Вы можете прочитать больше об этом здесь .

Вы можете сделать что-то подобное.

  @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();
        break;

      case MotionEvent.ACTION_MOVE:
        view.setY(event.getRawY() + dY);
        view.setX(event.getRawX() + dX);
        break;

      default:
        return false;
    }
    return true;
  }
Question

Мне нужно перетащить некоторые виды на экран. Я изменяю их положение, изменяя влево и сверху их параметры макета из события движения на ACTION_MOVE из прослушивателя касания. Есть ли способ «перетащить» предметы более гладко? Потому что такого рода «перетаскивание» вообще не гладко ... Вот код

public boolean onTouch(View view, MotionEvent motionEvent) {
    switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            dx = (int) motionEvent.getX();
            dy = (int) motionEvent.getY();
            break;

        case MotionEvent.ACTION_MOVE:
            int x = (int) motionEvent.getX();
            int y = (int) motionEvent.getY();
            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
            int left = lp.leftMargin + (x - dx);
            int top = lp.topMargin + (y - dy);
            lp.leftMargin = left;
            lp.topMargin = top;
            view.setLayoutParams(lp);
            break;
    }
    return true;
}



Было бы полезно посмотреть, как вы обрабатываете события ACTION_MOVE. Используете ли вы все точки, используя метод event.getHistorical ()? Если это не даст вам более плавное перетаскивание, другой идеей может быть интерполяция точек на пути. Я считаю, что будет достигнута компромисс между достижением плавности движения и быстрым реагированием на прикосновение пользователя. НТН.