首頁(yè) 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門(mén) / 進(jìn)階 / 社區(qū)互助

新手 | 你問(wèn)我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 14679|回復(fù): 0
上一主題 下一主題
[教程]

android listview拖動(dòng)和gridview拖動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1493997關(guān)于ListView拖拽移動(dòng)位置,想必大家并不陌生,比較不錯(cuò)的軟件都用到如此功能了.如:搜狐,網(wǎng)易,百度等,但是相比來(lái)說(shuō)還是百度的用戶體驗(yàn)較好,不偏心了,下面看幾個(gè)示例:     [color=rgb(248,] view plain這個(gè)方法的作用很簡(jiǎn)單:當(dāng)我們摁下的如果是可拖拽的圖標(biāo),那么進(jìn)行初始化該Item的映像試圖.而在這里如果大家對(duì)WindowManager和WindowManager.LayoutParams不熟悉的朋友先去參考下這篇文章,要對(duì)WindowManager有一定的了解,簡(jiǎn)單的會(huì)應(yīng)用.接下來(lái)我們看onTouchEvent事件:   
view plain簡(jiǎn)單說(shuō)明:首先在Touch中,我們要進(jìn)行判斷,是否點(diǎn)擊的是拖動(dòng)圖標(biāo),如果是的話,那么對(duì)ACTION_MOVE and ACTION_UP相應(yīng)事件進(jìn)行處理,并且返回true or false.作用:取消ListView自身的Touch事件.如果不是的話,執(zhí)行ListView 本身的Touch事件.大致就介紹這么多,具體的實(shí)現(xiàn),還是大家看源碼吧,我注釋的還算清晰,只要大家仔細(xì)看的話,一定可以掌握的,為什么這么說(shuō)呢,技術(shù)只有在掌握了情況下才可以進(jìn)行拓展.對(duì)了,提醒大家要理解這三句話:   
getRawX()和getRawY():獲得的是相對(duì)屏幕的位置.   
   
getX()和getY():獲得的永遠(yuǎn)是相對(duì)view的觸摸位置 坐標(biāo)(這兩個(gè)值不會(huì)超過(guò)view的長(zhǎng)度和寬度)。   
   
getLeft , getTop, getBOTTom,getRight, 這個(gè)指的是該控件相對(duì)于父控件的距離.
   
源碼:   
   
   
view plain下面我說(shuō)下適配器:   
   
view plain這里不過(guò)多解釋了,相信大家都看的明白.如果疑問(wèn)請(qǐng)留言.展示下運(yùn)行效果:  4 天前 上傳   
效果看起來(lái)還行吧,如果覺(jué)得不錯(cuò)的話,記得要贊一個(gè)哦.   
下面我們接著修改,模擬百度嘛,誰(shuí)讓百度這么牛叉呢.思路:點(diǎn)中拖拉圖標(biāo)的時(shí)候,每次移動(dòng)只要dragPosition發(fā)生改變,也就是我移動(dòng)到了下一個(gè)位置,那么此時(shí)我就進(jìn)行交換執(zhí)行update.并且除了第一次移動(dòng)外,在每次交換后要除去映射源的顯示,這樣用戶覺(jué)得這里的空位就是就是為我準(zhǔn)備的,比較人性化.實(shí)現(xiàn)起來(lái)并不復(fù)雜,前提是你得掌握上面的操作.源碼如下;   
view plain因?yàn)槲覀円獣r(shí)時(shí)交換位置,所以將原先的拖動(dòng)方法onDrop方法移動(dòng)到onChange中.具體的還是看源碼吧.   
另外的就是對(duì)適配器的修改,因?yàn)槟阋獙?duì)特殊的item進(jìn)行隱藏之類的操作,這些代碼我就不寫(xiě)了,我會(huì)將案例上傳網(wǎng)上,不懂的可以下載源碼.好了還是我們來(lái)觀看下效果吧.  [color=rgb(248,] view plain相信大家只要ListView拖拽弄白后,這個(gè)GridView也會(huì)輕易弄出來(lái),其實(shí)拖拽就是對(duì)坐標(biāo)的考察。向大家展示一下效果:  4 天前 上傳   
但是有個(gè)不足的地方,網(wǎng)上一些例子都是長(zhǎng)按可以拖拽,而點(diǎn)擊則執(zhí)行點(diǎn)擊事件.其實(shí)實(shí)現(xiàn)起來(lái)也不是很復(fù)雜,可是在實(shí)現(xiàn)的過(guò)程中,遇到了詭異糾結(jié)的問(wèn)題,郁悶了一天,結(jié)果目前先放棄,以后哪天在搞搞吧.糾結(jié)的問(wèn)題就是錯(cuò)位.我說(shuō)下我的思路:首先,我們?cè)谧远xGridView中創(chuàng)建一個(gè)控制是否可以Touch拖拽的變量,而這個(gè)變量的值我們通過(guò)對(duì)GridView的setOnItemClickListener和setOnItemLongClickListener來(lái)獲取,如:   
view plain這樣我們就實(shí)現(xiàn)了長(zhǎng)按可以拖拽的效果了,可是遇到個(gè)變態(tài)的問(wèn)題,不過(guò)這個(gè)思路沒(méi)有錯(cuò),肯定可以實(shí)現(xiàn).   
就先說(shuō)到這里,其實(shí)通過(guò)這個(gè)例子,我們還可以拓展實(shí)現(xiàn)ListView上滑動(dòng)的時(shí)候,到達(dá)Title時(shí),Title停留在頂部,當(dāng)下一個(gè)Titile滑動(dòng)到這里的時(shí)候,那么代替前面那個(gè)TItle.網(wǎng)上有寫(xiě)應(yīng)該就是這么搞的,具體實(shí)現(xiàn)不知道,不過(guò)這種方案可以實(shí)現(xiàn),有時(shí)間接著續(xù).   
   

上一篇:Android軟件開(kāi)發(fā)之EditText 詳解(八)
下一篇:第二十講:Content Provider 使用入門(mén)

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書(shū) | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-12-22 16:23 , Processed in 0.058455 second(s), 14 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表