Android - выполнять перетаскивание программно - PullRequest
4 голосов
/ 19 марта 2012

Я хотел бы программно перетащить один вид и выпустить его поверх другого для целей инициализации, возможно ли это?

РЕДАКТИРОВАТЬ: Я ищу способ имитации перетаскивания

1 Ответ

3 голосов
/ 19 марта 2012

Вы можете удалить виды из макетов и добавить их в другие макеты (если это то, что вы ищете)

ViewGroup oldGroup = (ViewGroup) findViewById(R.id.some_layout);
ViewGroup newGroup = (ViewGroup) findViewById(R.id.some_other_layout);

Button button = (Button) oldGroup.findViewById(R.id.a_button);

oldGroup.removeView(button);
newGroup.addView(button);

Нет анимации перетаскивания и это может дать странные результаты, но это возможно.

A ViewGroup будет LinearLayout, RelativeLayout и т. П.


Для имитации событий Drag & Drop вы можете вызвать onDragListener вручную, но есть одна проблема:

public boolean onDrag(View v, DragEvent event);

ожидает DragEvent, у которого нет открытого конструктора, поэтому вы можете вызывать его только с помощью null

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

private void initializationTest() {
    DragEvent event = null;
    /* maybe sth like that
    Parcel source = Parcel.obtain();
    source.writeInt(1234);
    event  = DragEvent.CREATOR.createFromParcel(source);
    */
    onDrag(theTargetView, event);
}

Еще одна возможность - возможно, создать touchevents, но Idk, если это сработает.По крайней мере, обезьяна могла бы сделать это.

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