Android中的拖拽功能是有自带的api的;(很多时候会误以为要自定义控件,所以我放到了,自定义目录下)
参考文档:
http://www.android-doc.com/guide/topics/ui/drag-drop.html
我写了一个例子分析:
效果图:
思路:
1主要用到了View的startDrag(startDragAndDrop API24+) 方法
2拖拽的监听OnDragListener方法
具体实现:
第一步:通过一个长按事件启动拖拽:
imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent = new Intent();
ClipData clipData = ClipData.newIntent("label", intent);
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(null, shadowBuilder, imageView, 0);
//震动反馈
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
return true;
}
});
第二步:OnDragListener监听拖拽
linearLayout.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
//v 永远是设置该监听的view,这里即fl_blue
String simpleName = v.getClass().getSimpleName();
// Log.w(BLUE, "view name:" + simpleName);
//获取事件
int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
Log.i("111", "开始拖拽");
imageView.setVisibility(View.INVISIBLE);