Android View 拖拽 移动 碰撞

Android View 拖拽 移动 碰撞 事件


1. 被拖动view

监听被拖动view 的长按事件,通过ClipData 生成影子view,可在此方法之后设置view为隐藏状态    

view.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        ClipData.Item item=new ClipData.Item((String)v.getTag());
        ClipData data=new ClipData(TAG,new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN},item);
        v.startDrag(data,new View.DragShadowBuilder(v),null,0);
        return true;
    }
});

2. 目标view

给目标view设置OnDragListener事件

layout.setOnDragListener(dragListener);

在事件回调方法中,可根据用户手指拖动的范围进行相应操作

View.OnDragListener dragListener=new View.OnDragListener() {
    @Override
    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)) {return true;}
                return false;
            case DragEvent.ACTION_DRAG_ENTERED://拖拽进入目标区域
                return true;
            case DragEvent.ACTION_DRAG_LOCATION://拖拽位置
                return true;
            case DragEvent.ACTION_DRAG_EXITED://拖拽到目标区域外
                return true;
            case DragEvent.ACTION_DROP: //拖拽完成之后松开手指
                return true;
            case DragEvent.ACTION_DRAG_ENDED://拖拽完成
                return true;
            default:
                break;
        }
        return false;
    }
};



你可能感兴趣的:(开发)