Android学习系列(11)--App列表之拖拽ListView(下)
接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果。
7.重写onTouchEvent()方法。
在这个方法中我们主要是处理拖动和放下。
拖动是选中项的影像随着手指滑动;放下是在拖动结束的时候交换数据。
方法的整体结构如下:
view sourceprint?01 /**
02 * 触摸事件
03 */
04 @Override
05 public boolean onTouchEvent(MotionEvent ev) {
06 //如果dragmageView为空,说明拦截事件中已经判定仅仅是点击,不是拖动,返回
07 //如果点击的是无效位置,返回,需要重新判断
08 if(dragImageView!=null&&dragPosition!=INVALID_POSITION){
09 int action = ev.getAction();
10 switch(action){
11 case MotionEvent.ACTION_UP:
12 int upY = (int)ev.getY();
13 //释放拖动影像
14 stopDrag();
15 //放下后,判断位置,实现相应的位置删除和插入
16 onDrop(upY);
17 break;
18 case MotionEvent.ACTION_MOVE:
19 int moveY = (int)ev.getY();
20 //拖动影像
21 onDrag(moveY);
22 break;
23 default:break;
24 }
25 return true;
26 }
27 //这个返回值能够实现selected的选中效果,如果返回true则无选中效果
28 return super.onTouchEvent(ev);
29 }
8.拖动影像。
拖动的时候,我们调用了onDrag(int y)方法,主要做的事情是,让选中项的影像随这手指滑动起来。如下:
view sourceprint?1 if(dragImageView!=null){
2 //设置一点点的透明度
3 windowParams.alpha = 0.8f;
4 //更新y坐标位置
5 windowParams.y = y - dragPoint + dragOffset;
6 //更新界面
7 windowManager.updateViewLayout(dragImageView, windowParams);
8 }
当数据集合很大的时候,还需要在拖动到上部区域或者下部区域的时候滚动列表,使用ListView自带的方法setSelectionFromTop()。
一个可以滚动的拖拽列表雏形就出来了,最终onDrag()方法代码如下:
view sourceprint?01 /**
02 * 拖动执行,在Move方法中执行
03 * @param y
04 */
05 public void onDrag(int y){&
相关新闻>>
- 发表评论
-
- 最新评论 更多>>