使用用ADW的Launcher的人應(yīng)該有點(diǎn)印象里面的功能,就是拖拽應(yīng)用或者Widget圖標(biāo)到刪除圖標(biāo)上,停留1秒以上,
則會(huì)顯示"Drop to uninstall"的提示,放開則打開卸載該程序的界面,現(xiàn)在就是要分析模仿這個(gè)功能。
主要用到有兩方面的東西,卸載和停留提示。
卸載主要使用的是:
從這個(gè)來看,要卸載一個(gè)應(yīng)用,主要是知道其PackageName即可。
當(dāng)拖拽圖標(biāo)到刪除欄上,停留超過一定時(shí)間的時(shí)候,就轉(zhuǎn)到卸載的模式,這個(gè)可以用Handler的
postDelayed ( Runnable r, long delayMillis)
來實(shí)現(xiàn)。
我們現(xiàn)在來分析一下拖拽所產(chǎn)生的響應(yīng)事件,
當(dāng)開始拖拽的時(shí)候,首先運(yùn)行的是:
onDragStart->onDragOver->onDragExit->onDragEnd.
當(dāng)把圖標(biāo)拖動(dòng)進(jìn)入刪除區(qū)域的時(shí)候,會(huì)執(zhí)行onDragEnter,移出則執(zhí)行onDragExit.
而如果圖標(biāo)是拖入到刪除區(qū)域再松開的話,則會(huì)是onDragEnter->onDragDrop->onDragExit->onDragEnd.
拖動(dòng)結(jié)束一定會(huì)執(zhí)行的兩個(gè)事件是onDragExit->onDragEnd.其中onDragExit在onDragEnd之前發(fā)生。
因此在onDragEnter的時(shí)候,讀取PackageName和postDelayed發(fā)送一個(gè)延遲消息給Runnable(設(shè)置卸載標(biāo)志)
然后在onDragExit里面再
removeCallbacks ( Runnable r)移除隊(duì)列里面的消息,
并 postDelayed一個(gè)消息,清空卸載標(biāo)志,當(dāng)然這里的延遲時(shí)間要比前面onDragEnter里面的時(shí)間要小得多,
這樣實(shí)現(xiàn)的效果是:
1. 如果是拖拽進(jìn)刪除區(qū)域,再拖出來的時(shí)候,會(huì)清空卸載標(biāo)志;
2. 如果是拖拽進(jìn)刪除區(qū)域足夠長(zhǎng)時(shí)間再放開(應(yīng)該打開卸載界面,已經(jīng)設(shè)置卸載標(biāo)志),確保延遲的時(shí)間內(nèi)onDragEnd已經(jīng)執(zhí)行,因?yàn)閜ostDelayed是清空卸載標(biāo)志的,所以如果要保留卸載標(biāo)志,需要延遲時(shí)間要比onDragEnd執(zhí)行時(shí)間大。
最后在onDragEnd的時(shí)候,判斷卸載標(biāo)志和程序PackageName如果符合條件則執(zhí)行卸載動(dòng)作。
呵呵,說得不是很清楚,下面上主要源碼:
onDragEnter:
onDragExit:
onDragEnd:
運(yùn)行效果圖:
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
