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;
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值