最近項(xiàng)目需要一個(gè)多種類(lèi)型圖片之間的互相拖拽的效果了牛,之前窒朋,由于是采用RecleView嵌套R(shí)ecleView實(shí)現(xiàn)的寓辱,所以只能支持單個(gè)RecleView之間的相互拖拽粮坞,后來(lái)采用BaseRecyclerViewAdapterHelper開(kāi)源庫(kù)的多布局使用一個(gè)RecleView來(lái)實(shí)現(xiàn)不同類(lèi)型的拖拽功能蚊荣。類(lèi)型是于下面這種布局,不同類(lèi)型的圖片可以互相拖拽:
新建一個(gè)可以支持拖拽的adapter,繼承自BaseItemDraggableAdapter莫杈,由于我們要實(shí)現(xiàn)拖拽功能互例,所以自能通過(guò)代理的方式來(lái)實(shí)現(xiàn)多布局,具體可以參考開(kāi)源庫(kù)BaseRecyclerViewAdapterHelper筝闹,實(shí)例代碼如下:
重寫(xiě)ItemDragAndSwipeCallback腥光,實(shí)現(xiàn)getMovementFlags和onMove方法,可以在getMovementFlags方法中限制某些item不支持拖動(dòng)糊秆,在onMove方法中限制拖動(dòng)結(jié)束后item不能被替換:
設(shè)置adapter.enableDragItem來(lái)激活拖拽功能柴我。
可以設(shè)置adapter的setOnItemDragListener回調(diào),重寫(xiě)onItemDragMoving扩然,onItemDragStart,onItemDragEn3個(gè)方法聋伦,在這三個(gè)方法中來(lái)進(jìn)行拖拽的業(yè)務(wù)邏輯處理夫偶。
最后,將GridLayoutManager根據(jù)類(lèi)型設(shè)置成一行3列和一行一列觉增。