Android 初步实现item可拖拽RecyclerView (Grid模式下)

Android 初步实现item可拖拽RecyclerView (Grid模式下)


0.首先先给一张效果图。部分功能么有实现,好吧我承认我不太会大笑。仅仅给自己留个记录。供参考。


1.先说下思路 用到的类:DragParent (继承RelativeLayout) 、DragGridView (继承RecyclerView)、Bean item数据项、DragAdapter (DragGridView适配器)

外加2个接口PreDragListener(即将进入拖拽状态)、DraggingListener(拖拽中,拖拽结束)。

2.当长按 DragGridView 的item时,该Item View设置不可见状态,通过接口方法告知 DragParent  即将进入拖拽状态。

3.DragParent  进入拖拽状态 马上获取被拖拽item View 对应的Bitmap,并把该Bitmap放入ImageView中,添加到DragParent  内部 item view的位置。

4.重写DragParent   dispatchTouchEvent() ,在拖拽状态下 Move 计算当前event x、y坐标位于DragGridView 的那个位置。

5.如果被拖拽的item的位置与当前拖拽点x、y坐标所属item位置不一致,说明需要DragGridView  remove掉被拖拽item ,并且在当前拖拽点位置insert。

6.首先自定义一个ID。遇到不要忘记,主要是实现 DragGridView 的itemView与 Bean进行绑定用的。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="id_bean_" type="id"/>
</resources>
7.先看看 Bean 和接口类 简写了。

public class Bean {
    String str;//item+i
    boolean isDragged;//是否处于拖拽状态
    int rid;//该Bean对应的 图片资源id
    boolean isLongClicked;

    public Bean(String str, int rid) {
        this.str = str;
        this.rid = rid;
    }

}
public interface PreDragListener {
    /**
     * 某个DragGridView 的ItemView 进入拖拽状态回调
     */
    void preDrag(View view);
}
public interface DraggingListener {
    /**
     * 拖拽中时,返回的当前拖拽的坐标
     */
    void dragging(float x, float y);

    void dragEnd();
}

8.DragParent 实现了PreDragListener,当DragAdapter 内部触发长按回调时 需要调用该接口告知 DragParent那个itemView 进入拖拽状态。

9.DragGridView 实现了DraggingListener,当DragParent 内部添加的imagevie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值