1、Android拖放框架的作用?
利用Android的拖放框架,可以让用户用拖放手势把一个View中的数据移到当前layout内的另一个View中去。
2、拖放框架的内容?
1)拖放事件类
2)拖放监听器
3)其他辅助的方法和类
3、拖放过程?
拖放过程有四个基本步骤:
1)启动 为了响应用户开始拖动的手势,需要调用View的startDrag方法来通知系统。startDrag方法的参数需要指定所拖动的数据、元数据和绘制拖动阴影的回调方法。
作为响应,系统首先通过回调来获取拖动阴影,然后在设备上显示这个阴影。
4、例子
长按某个View,进行拖动操作。
1)创建用于移动数据的ClipData和ClipData.Item。在ClipData对象中,需要给出存放元数据的ClipDescription对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private static final String IMAGEVIEW_TAG = "icon bitmap"
ImageView imageView = new ImageView( this );
imageView.setImageBitmap(mIconBitmap); imageView.setTag(IMAGEVIEW_TAG); ...
imageView.setOnLongClickListener( new View.OnLongClickListener() {
public boolean onLongClick(View v) {
ClipData.Item item = new ClipData.Item(v.getTag());
ClipData dragData = new ClipData(v.getTag(),ClipData.MIMETYPE_TEXT_PLAIN,item);
View.DragShadowBuilder myShadow = new MyDragShadowBuilder(imageView);
v.startDrag(dragData, // the data to be dragged
myShadow, // the drag shadow builder
null , // no need to use local data
0 // flags (not currently used, set to 0)
);
}
}); |
2)定义MyDragShadowBuilder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
private static class MyDragShadowBuilder extends View.DragShadowBuilder {
private static Drawable shadow;
public MyDragShadowBuilder(View v) {
super (v);
shadow = new ColorDrawable(Color.LTGRAY);
}
@Override
public void onProvideShadowMetrics (Point size, Point touch) {
private int width, height;
width = getView().getWidth() / 2 ;
height = getView().getHeight() / 2 ;
shadow.setBounds( 0 , 0 , width, height);
size.set(width, height);
touch.set(width / 2 , height / 2 );
}
@Override
public void onDrawShadow(Canvas canvas) {
shadow.draw(canvas);
}
} |