1. DragShadowBuilder有三个methods
其中,
public void onProvideShadowMetrics (Point shadowSize, Point shadowTouchPoint)
确定shadow大小及位置,shadowTouchPoint是相对于该view的位置,我的要求是设为touch.set(0, height/2)。
2. 数据传递
通过clipdata(ClipData.item)传递数据(有三种类型, simple CharSequence of text, a single Intent object, or a Uri)
在被drag的对象的onLongClickListener监听到longclick后,通过view.startDrag(dragData,myShadowBuilder,null(local data),0(flags))将数据打包send给system
等待接收drag的对象一直监听(setOnDragListener),通过DragEvent的getAction()判断action类型并进行相应操作,
在start的时候,判断该view是否接收dragged data
在Drop的时候,新建ClipData对象接收数据,
在end的时候,通过event.getResult()判断drop是否成功
3. ClipData构造函数及new一个ClipData对象
A ClipData contains a ClipDescription
, which describes important meta-data about the clip.
每个ClipData都含有一个ClipDescription,用来描述关于这个clip的重要meta-data。
MimeTypes??
有两个构造函数:
ClipData(CharSequence label, String[] mineTypes, ClipData.Item item)
ClipData(ClipDescription description, ClipData.Item item)
常用第一种,官方doc给出的示例第二参数报错。
String[] mineTypes = { ClipDescription.MIMETYPE_TEXT_PLAIN, ClipDescription.MIMETYPE_TEXT_Intent, ClipDescription.MIMETYPE_TEXT_URLIST};
可以解决问题
ClipData是ClipData.Item的数组,有ClipData.Item item = event.getClipData().getItemAt(0);