ANDROID3.0 provides a Drag/drop framework that allows you to drag and drop a view into another view in the current layout using drag-and-drop. This article describes how to use the drag-and-drop framework.
I. Steps to implement drag-and-drop |
First, let's take a look at the drag-and-drop process, from the official documentation to know that the entire drag-and-drop process is divided into 4 steps, as follows:
1, Started: Start drag and drop, mainly call the StartDrag method that is dragged and dropped view. The prototype for this method is:
Public Final Boolean StartDrag (Clipdata data,
View.dragshadowbuilder Shadowbuilder,
Object Mylocalstate,
int flags)
After startup, the system generates drag-and-drop shadows and sends a drag-and-drop event with action action_drag_started to the current layout that has settings for the drag-and-drop listener view.
2, continuing: Keep dragging state. During this process, one or more drag events may be sent to the view where the drag-and-drop listener is set, such as action_drag_entered, Action_drag_location, and so on.
3. Dropped: The user releases the drag shadow within the target area, and the system sends an action-action_drop event to the view with the drag-and-drop listener set.
4, Ended: The user released the Drag shadow, the system will set the drag-and-drop listener view send action as action_drag_ended event, complete the drag and drop.
Ii. key interfaces and classes during the drag-and-drop process |
Secondly, we need to understand clearly several key interfaces and classes in the drag-and-drop process, mainly Ondraglistener, Dragevent, Dragshadowbuilder, Clipdata, clipdescription and so on.
1, Ondraglistener: interface, drag and drop event listener. When drag occurs, the method in this interface is recalled. The interface contains only one method Ondrag, the method prototype is:
Boolean Ondrag (View v,dragevent event)
Parameter V: Set the view of the listener
Parameter event: Drag-and-drop event parameters that encapsulate drag-and-drop related data
Return value: true-event handled; false event unhandled.
2. Dragevent: Drag-and-drop event object that contains different event data depending on the action.
3. Dragshadowbuilder: Drag and Drop shadow constructor object to construct drag-and-drop shadows.
4, Clipdata, clipdescription: Mobile data for drag and drop.
After we have a basic understanding of the above, we will take the following cases, first look at
There are two areas in the interface, gray areas and yellow areas, icons can be freely dragged in the gray area, and can change their position, such as
When the icon enters or leaves the yellow area, the color is changed, as follows
Iv. implementation of the case |
Let's take a look at how to implement:
Layout file with the following code:
<?XML version= "1.0" encoding= "Utf-8"?><Relativelayoutxmlns:android= "Http://schemas.android.com/apk/res/android"Android:id= "@+id/topcontainer"Android:layout_width= "Match_parent"Android:layout_height= "Match_parent"android:orientation= "vertical" > <ImageViewAndroid:id= "@+id/img"Android:layout_width= "Wrap_content"Android:layout_height= "Wrap_content"android:contentdescription= "@null"android:src= "@drawable/ic_launcher" /> <LinearLayoutAndroid:id= "@+id/container"Android:layout_width= "Match_parent"Android:layout_height= "100DP"Android:layout_alignparentbottom= "true"android:orientation= "vertical"Android:background= "#cccccc" > <TextViewAndroid:id= "@+id/title"Android:layout_width= "Fill_parent"Android:layout_height= "Wrap_content"Android:textcolor= "#ff0000"android:textsize= "18SP" /> </LinearLayout></Relativelayout>
Java files:
Bind long click events for ImageView
Imageview.setonlongclicklistener (NewOnlongclicklistener () {@Override Public BooleanOnlongclick (View v) {//Create mobile DataClipdata.item Item =NewClipdata.item (String) V.gettag ()); Clipdata Data=NewClipdata (Imageview_tag,Newstring[] {clipdescription.mimetype_text_plain}, item); //Call the StartDrag method, and the second argument is to create a drag-and-drop shadowV.startdrag (data,NewView.dragshadowbuilder (v),NULL, 0); return true; } });
To target view bindings, drag-and-drop monitoring:
Container.setondraglistener (NewOndraglistener () {@Override Public BooleanOndrag (View V, dragevent event) {Final intAction =event.getaction (); Switch(action) { Casedragevent.action_drag_started://drag and Drop start event if(Event.getclipdescription (). Hasmimetype (Clipdescription.mimetype_text_plain)) { return true; } return false; Casedragevent.action_drag_entered://drag and drop view into target viewContainer.setbackgroundcolor (Color.yellow); return true; Casedragevent.action_drag_location:return true; Casedragevent.action_drag_exited://drag and drop view away from Target viewContainer.setbackgroundcolor (Color.Blue); Title.settext (""); return true; CaseDragevent.action_drop://release drag-and-drop shadows and get moving dataClipdata.item Item = Event.getclipdata (). Getitemat (0); String Dragdata=Item.gettext (). toString (); Title.settext (Dragdata+event.gety () + ":" +event.getx ()); return true; Casedragevent.action_drag_ended://drag-and-drop event completion return true; default: Break; } return false; } });
Five, source code download |
For a small partner who wants to practice, you can download the complete engineering test by clicking on " source download ".
Android Development Drag&drop Framework implements drag-and-drop gestures