Android – Programmatically perform drag-and-drop
I want to programmatically drag one View and release it on top of another for initialization, is this possible?
EDIT: I’m looking for a way to simulate drag and drop
Solution
You can remove Views from a layout and add them to other layouts if that’s what you’re looking for
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);
Without drag-and-drop animations, it can produce strange results, but it is possible.
ViewGroup
can be LinearLayout
, RelativeLayout
, etc.
To simulate drag-and-drop events, you can manually invoke onDragListener, but there is a problem:
public boolean onDrag(View v, DragEvent event);
You need a DragEvent
without a public constructor, so you can only call it with null
There may be a way to create one with a fake parcel, but that would be ugly.
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);
}
Another possibility is to create touchevents, but don’t know if that works. At least monkey might do that.