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控件要知道是谁拖曳到它那里。的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义万能Canvas画布

VB.net 实现TreeView控件的拖拽事件

JCameraView 仿微信拍照Android控件(点击拍照,长按录小视频)

android自定义控件

求助:android两个及以上控件点击事件同时监听响应如何实现

上下文菜单不适用于两个片段