2009-03-31 4 views
5

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

Возможно ли это, используя стандартную андроидную апис?

ответ

6

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

Это может быть сделано с помощью стандартного 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

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

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

0

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