有一个姑凉 发表于 2013-8-28 16:19

android listview拖动和gridview拖动

1493997关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例:   http://www.apkbus.com/data/attachment/forum/201308/24/161014vihyzywwiiso2pyt.jpg view plain这个方法的作用很简单:当我们摁下的如果是可拖拽的图标,那么进行初始化该Item的映像试图.而在这里如果大家对WindowManager和WindowManager.LayoutParams不熟悉的朋友先去参考下这篇文章,要对WindowManager有一定的了解,简单的会应用.接下来我们看onTouchEvent事件:   
view plain简单说明:首先在Touch中,我们要进行判断,是否点击的是拖动图标,如果是的话,那么对ACTION_MOVE and ACTION_UP相应事件进行处理,并且返回true or false.作用:取消ListView自身的Touch事件.如果不是的话,执行ListView 本身的Touch事件.大致就介绍这么多,具体的实现,还是大家看源码吧,我注释的还算清晰,只要大家仔细看的话,一定可以掌握的,为什么这么说呢,技术只有在掌握了情况下才可以进行拓展.对了,提醒大家要理解这三句话:   
getRawX()和getRawY():获得的是相对屏幕的位置.   
   
getX()和getY():获得的永远是相对view的触摸位置 坐标(这两个值不会超过view的长度和宽度)。   
   
getLeft , getTop, getBottom,getRight, 这个指的是该控件相对于父控件的距离.   
源码:   
   
   
view plain下面我说下适配器:   
   
view plain这里不过多解释了,相信大家都看的明白.如果疑问请留言.展示下运行效果:http://www.apkbus.com/data/attachment/forum/201308/24/161029wesujesu6su1ssd2.jpg4 天前 上传   
效果看起来还行吧,如果觉得不错的话,记得要赞一个哦.   
下面我们接着修改,模拟百度嘛,谁让百度这么牛叉呢.思路:点中拖拉图标的时候,每次移动只要dragPosition发生改变,也就是我移动到了下一个位置,那么此时我就进行交换执行update.并且除了第一次移动外,在每次交换后要除去映射源的显示,这样用户觉得这里的空位就是就是为我准备的,比较人性化.实现起来并不复杂,前提是你得掌握上面的操作.源码如下;   
view plain因为我们要时时交换位置,所以将原先的拖动方法onDrop方法移动到onChange中.具体的还是看源码吧.   
另外的就是对适配器的修改,因为你要对特殊的item进行隐藏之类的操作,这些代码我就不写了,我会将案例上传网上,不懂的可以下载源码.好了还是我们来观看下效果吧.http://www.apkbus.com/data/attachment/forum/201308/24/161033l7bbxuajsf5o5hai.jpg view plain相信大家只要ListView拖拽弄白后,这个GridView也会轻易弄出来,其实拖拽就是对坐标的考察。向大家展示一下效果:http://www.apkbus.com/data/attachment/forum/201308/24/161035c5yvg3khz5klgxcm.jpg4 天前 上传   
但是有个不足的地方,网上一些例子都是长按可以拖拽,而点击则执行点击事件.其实实现起来也不是很复杂,可是在实现的过程中,遇到了诡异纠结的问题,郁闷了一天,结果目前先放弃,以后哪天在搞搞吧.纠结的问题就是错位.我说下我的思路:首先,我们在自定义GridView中创建一个控制是否可以Touch拖拽的变量,而这个变量的值我们通过对GridView的setOnItemClickListener和setOnItemLongClickListener来获取,如:   
view plain这样我们就实现了长按可以拖拽的效果了,可是遇到个变态的问题,不过这个思路没有错,肯定可以实现.   
就先说到这里,其实通过这个例子,我们还可以拓展实现ListView上滑动的时候,到达Title时,Title停留在顶部,当下一个Titile滑动到这里的时候,那么代替前面那个TItle.网上有写应该就是这么搞的,具体实现不知道,不过这种方案可以实现,有时间接着续.   
   
页: [1]
查看完整版本: android listview拖动和gridview拖动