学习drag_sort_list

本文详细解析了drag_sort_listview.jar内的核心代码逻辑,特别是onOptionsItemSelected、onTouch、onDown、onTouch、onTouch、onTouch等关键方法,深入探讨了drag、sort列表视图的实现细节,包括事件处理流程、有效拖拽起点和终点的确定、drag状态的管理等。通过案例分析,揭示了如何通过自定义控制器来实现列表元素的拖动排序功能。
drag_sort_listview.jar

<pre name="code" class="java"><pre name="code" class="java">  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        FragmentTransaction transaction;
        DSLVFragment f = (DSLVFragment) getSupportFragmentManager().findFragmentByTag(mTag);
        DragSortListView dslv = (DragSortListView) f.getListView();
        DragSortController control = f.getController();
。。。。。
}

    public DragSortListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        
        。。。。。
                mFloatViewManager = controller;
                
                //xzshan01  确定drag的有效起点  落点down后,event不在往下dispatch了,down事件路径结束;
                //接下来是move和up事件;先到onIntercept中看看
                setOnTouchListener(controller);
。。。。。
            }
        }

  @Override
    public boolean onTouch(View v, MotionEvent ev) {
。。。。。
        //xzshan02 ondown中确定drag的第一个落点
        mDetector.onTouchEvent(ev);
   。。。。。
        }
down事件处理
@Override
    public boolean onDown(MotionEvent ev) {
    。。。。。
        mHitPos = startDragPosition(ev);
        
        if (mHitPos != MISS && mDragInitMode == ON_DOWN) {
        Log.d("event","==startDrag==");
            startDrag(mHitPos, (int) ev.getX() - mItemX, (int) ev.getY() - mItemY);
        }
        。。。。。
    
    }
move 事件:
@Override
    public boolean onTouch(View v, MotionEvent ev) {
。。。。。
      
// if (mFloatView != null) {
        if (mDragState == DRAGGING) {
         //xzshan06 ondrag
            onDragTouchEvent(ev);
            more = true; // give us more!

   。。。。。
        }
up事件:

  @Override
    public boolean onTouch(View v, MotionEvent ev) {
     
         。。。
            case MotionEvent.ACTION_UP:
            
                。。。。
                        mDslv.stopDragWithVelocity(true, 0);
              。。。
                }
            case MotionEvent.ACTION_CANCEL:
                mIsRemoving = false;
                mDragging = false;
                break;
        }
。。。。
    }


    





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值