Можно ли перемещать компоненты по экрану с помощью стандартного Android apis? - PullRequest
5 голосов
/ 31 марта 2009

Я хотел бы создать пользовательский интерфейс android, который позволяет пользователю перемещать добавленные components / widgets по экрану, выбирая их, а затем перетаскивая их.

Возможно ли это с помощью стандартного Android apis?

Ответы [ 3 ]

6 голосов
/ 31 марта 2009

Да. Это зависит от того, чего вы пытаетесь достичь.

Это может быть сделано с использованием стандартных API, но эта функциональность не является частью стандартных API. То есть widget.DragOverHere() метод не существует, если вы не напишите его.

Тем не менее, это было бы не очень сложно сделать. Как минимум, вам нужно написать собственный подкласс View и реализовать два метода: onDraw(Canvas c) и onTouch(MotionEvent e). Черновой набросок:

class MyView extends View {

    int x, y;  //the x-y coordinates of the icon (top-left corner)
    Bitmap bitmap; //the icon you are dragging around

    onDraw(Canvas c) {
      canvas.drawBitmap(x, y, bitmap);
    }

    onTouch(MotionEvent e) {
      switch(e.getAction()) {
      case MotionEvent.ACTION_DOWN:
        //maybe use a different bitmap to indicate 'selected'
        break;
      case MotionEvent.ACTION_MOVE:
        x = (int)e.getX();
        y = (int)e.getY();
        break;
      case MotionEvent.ACTION_UP:
        //switch back to 'unselected' bitmap
        break;
      }
      invalidate(); //redraw the view
    }
}
0 голосов
/ 31 марта 2009

Способ, которым я это сделал, - создать абсолютный макет, а затем просто обновить положение объекта при его перетаскивании. Вы должны осуществить перетаскивание себя. Если виджеты имеют естественный порядок (панель инструментов, на которой вы хотите перетаскивать кнопки), вы можете поместить абсолютный макет поверх панели инструментов, а когда перетаскивание начинается, вы добавляете его в абсолютный макет, а когда он заканчивается, Вы добавляете его обратно в исходный макет в новой позиции.

0 голосов
/ 31 марта 2009

До некоторой степени. Это зависит от того, какую степень свободы вы хотите дать пользователю. Одним из решений, которое приходит на ум, является TableLayout с предопределенными ячейками. Пользователь может затем нажать и перетащить компоненты. При перетаскивании компонента вы просто захотите нарисовать его изображение под пальцем пользователя, но когда они отпустят, удалите компонент из его предыдущего родителя и добавьте его в нового родителя, используя методы добавления / удаления ViewGroup.

Несмотря на то, что вы можете программно перемещать виды вокруг, было бы трудно / невозможно переключать макеты на лету, насколько я вижу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...