想在Android上实现拖放并没有快捷方法,因为Android没内嵌这个功能,只有自己动手写。
在Android上,触摸事件由一系列事件构成。首先,用户将手指放在屏幕的一个元素上,该元素接收到一个ACTION_DOWN事件。然后,用户保持手指在屏幕上,将手指移动到一个新的位置。该元素接收到一系列ACTION_MOVE事件。最后,用户拿起手指,这时,该元素接收到一个ACTION_UP事件。
Android上的touch事件有两个重要的特点:一.touch事件会被转移。如果一个子控件在它的onTouchEvent句柄中返回false,它将忽略第一个事件(ACTION_DOWN),而父级的onTouchEvent举办将接收此事件,除非其中一个祖先控件同意处理该事件或者是事件到达根控件,不然这个激活的事件将一直被传播;二.父级可以在子控件的onTouchEvent句柄被激活前拦截触摸事件。可以通过重载父级的onInterceptTouchEvent方法,并返回true来实现这点。结果是,子控件的onTouchEvent句柄将被忽略,而父级的onTouchEvent将被激活。
下图表示touch事件转移的过程:
我们需要在父级和子级控件中设置onTouchEvent句柄。在子级句柄中,我们将子元素保存为将被拖动的项,并返回false,这样一系列的子事件将被传达到父级句柄。在父级句柄中,我们改变子视图的边来适应手指的位置,这样子视图就可以跟随我们的手指移动了。