1、Android拖放框架的作用?
利用Android的拖放框架,可以让用户用拖放手势把一个View中的数据移到当前layout内的另一个View中去。
2、拖放框架的内容?
1)拖放事件类
2)拖放监听器
3)其他辅助的方法和类
3、拖放过程?
拖放过程有四个基本步骤:
1)启动 为了响应用户开始拖动的手势,需要调用View的startDrag方法来通知系统。startDrag方法的参数需要指定所拖动的数据、元数据和绘制拖动阴影的回调方法。
作为响应,系统首先通过回调来获取拖动阴影,然后在设备上显示这个阴影。
4、例子
长按某个View,进行拖动操作。
1)创建用于移动数据的ClipData和ClipData.Item。在ClipData对象中,需要给出存放元数据的ClipDescription对象。
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
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);
}
}