Android中从A控件长按拖曳到B控件,并且B控件要知道是谁拖曳到它那里。
Posted 志向远大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中从A控件长按拖曳到B控件,并且B控件要知道是谁拖曳到它那里。相关的知识,希望对你有一定的参考价值。
1.在长按的点击事件里面实现下面的操作。
// 长按发生的事情
private static void setOnlongclicklistener(View v)
v.setOnLongClickListener(new OnLongClickListener()
@Override
public boolean onLongClick(View view)
view.getTag(); //获取view下面的文字标识
ClipData data = ClipData.newPlainText("tag",
(CharSequence) view.getTag()); // 把参数传给"tag"标识
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); // DragShadowBuilder画view影子的一个生成器
view.startDrag(data, shadowBuilder, view, 0); //启动拖曳行为
return false;
);
2.B控件设置拖曳监听
b.setOnDragListener(mDragListen);
3.初始化拖曳监听器
mDragListen = new myDragEventListener();
4.自定义拖曳监听器
public class myDragEventListener implements View.OnDragListener
public boolean onDrag(View v, DragEvent event)
final int action = event.getAction();
switch (action)
case DragEvent.ACTION_DRAG_STARTED: // 拖曳行动开始
if (event.getClipDescription().hasMimeType(
ClipDescription.MIMETYPE_TEXT_PLAIN))
// 背景设为蓝色
v.getBackground().setColorFilter(Color.BLUE,
PorterDuff.Mode.MULTIPLY);
v.invalidate();//view无效
return true;
return false;
case DragEvent.ACTION_DRAG_ENTERED:
// 已进入这个view边框,背景颜色设计为绿色。
v.getBackground().setColorFilter(Color.GREEN,
PorterDuff.Mode.MULTIPLY);
v.invalidate();//view无效
return true;
case DragEvent.ACTION_DRAG_LOCATION:
// 此时的event行为可以或者X/Y的具体坐标
return true;
case DragEvent.ACTION_DRAG_EXITED:
// 当拖曳离开view的边框范围,控件的背景颜色又设计为蓝色
v.getBackground().setColorFilter(Color.BLUE,
PorterDuff.Mode.MULTIPLY);
v.invalidate();//view无效
return true;
case DragEvent.ACTION_DROP:// 大部分操作在释放后执行
// 拖曳行为释放,返回item数据或者X、Y的坐标
ClipData.Item item = event.getClipData().getItemAt(0);//ClipData.Item T:01-54:4A:16:1F:39:7F1988一路开关
String dragData = (String) item.getText();//01-54:4A:16:1F:39:7F1988一路开关
String[] dragDataarray = dragData.split("1988");//[01-54:4A:16:1F:39:7F, 一路开关]
v.getBackground().clearColorFilter();// 清楚颜色过滤器
return true;
case DragEvent.ACTION_DRAG_ENDED:// 拖曳结束
v.getBackground().clearColorFilter();
v.invalidate();
if (event.getResult())
Toast.makeText(RemoteControlSetting.this,
"The drop was handled.", Toast.LENGTH_LONG);
else
Toast.makeText(RemoteControlSetting.this,
"The drop didn't work.", Toast.LENGTH_LONG);
return true;
default:
break;
return false;
以上是关于Android中从A控件长按拖曳到B控件,并且B控件要知道是谁拖曳到它那里。的主要内容,如果未能解决你的问题,请参考以下文章
JCameraView 仿微信拍照Android控件(点击拍照,长按录小视频)