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