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);

posted on 2011-04-23 15:26  榆钱沽酒  阅读(672)  评论(0编辑  收藏  举报