如何使用Android的拖拽接口實(shí)現(xiàn)拖拽功能

轉(zhuǎn)載注明出處:簡(jiǎn)書-十個(gè)雨點(diǎn)

簡(jiǎn)介

拖拽操作在現(xiàn)在的智能手機(jī)中并不少見,老羅的OneStep更是把拖拽做成了一種令人拍手叫絕的交互方式疟暖。在錘子手機(jī)原生的Bigbang中,普通拖動(dòng)是多選文字,長(zhǎng)按選中的文字并拖動(dòng)是觸發(fā)OneStep的分享功能胞皱。而我在模仿Bigbang的時(shí)候,覺得用戶可能需要對(duì)文字進(jìn)行一些微調(diào)九妈,所以我把長(zhǎng)按設(shè)計(jì)成了細(xì)分詞(把詞語細(xì)分成單字)反砌,而拖拽的交互留給了排序功能(需要切換排序開關(guān))。

效果圖

長(zhǎng)按細(xì)分詞萌朱,拖拽排序

也可以下載全能分詞體驗(yàn)

實(shí)現(xiàn)原理和步驟

其實(shí)Android已經(jīng)提供了拖拽功能的接口宴树,在API level 11以上的View類中,直接調(diào)用startDrag()方法或者startDragAndDrop()即可晶疼。

View.startDrag()

渣翻一下:

public final boolean startDrag(ClipData data, DragShadowBuilder shadowBuilder,
                                   Object myLocalState, int flags) 
開始一個(gè)拖拽操作酒贬。

調(diào)用這個(gè)方法時(shí)又憨,會(huì)將一個(gè)View.DragShadowBuilder對(duì)象傳遞給系統(tǒng)。

系統(tǒng)將調(diào)用這個(gè)View.DragShadowBuilder對(duì)象的onProvideShadowMetrics(Point, Point)方法來獲取拖拽陰影的metrics锭吨,
再調(diào)用其onDrawShadow(Canvas)方法來繪制拖拽陰影蠢莺。

之后,系統(tǒng)開始拖拽操作耐齐,并將拖拽事件(drag events)發(fā)送給你應(yīng)用中所有visible的View對(duì)象浪秘。

拖拽事件是被發(fā)送到View對(duì)象的drag listener或者onDragEvent()方法。
drag listener和onDragEvent()方法接收的參數(shù)都是一個(gè)DragEvent對(duì)象埠况,
對(duì)這個(gè)DragEvent對(duì)象執(zhí)行g(shù)etAction()方法的結(jié)果是ACTION_DRAG_STARTED耸携。

startDrag()方法可以在任何attacked的View對(duì)象上調(diào)用,
而不需要是View.DragShadowBuilder使用的View對(duì)象辕翰,也不需要與被拖拽的View有任何關(guān)系夺衍。

整個(gè)拖拽過程中涉及到的類只有三個(gè):ClipData,DragShadowBuilder和OnDragListener喜命,步驟只有如下兩步:

1. 設(shè)置拖拽數(shù)據(jù)沟沙,并開始拖拽

ClipData clipData = ClipData.newPlainText(lable, text);//這只是其中一種方式,還可以傳遞更豐富的數(shù)據(jù)
View.DragShadowBuilder myShadow = new DragShadowBuilder(view);
view.startDrag(clipData, myShadow, null, 0);

2. 在需要接收拖拽的View上設(shè)置監(jiān)聽

anotherView.setOnDragListener(new OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {        
        doSomething();
        return true;//true means consumed
    }
});

看完上面的介紹是不是發(fā)現(xiàn)實(shí)現(xiàn)拖拽操作很簡(jiǎn)單呢壁榕?沒錯(cuò)矛紫,借助系統(tǒng)方法,我們需要做的工作極少牌里。

源碼

完整代碼參見Bigbang項(xiàng)目的BigBangLayout類的實(shí)現(xiàn)颊咬,拖拽的部分從initView()方法和onTouchEvent()方法看起即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牡辽,一起剝皮案震驚了整個(gè)濱河市喳篇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌态辛,老刑警劉巖麸澜,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奏黑,居然都是意外死亡炊邦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門攀涵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铣耘,“玉大人,你說我怎么就攤上這事以故∥舷福” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)炉媒。 經(jīng)常有香客問我踪区,道長(zhǎng),這世上最難降的妖魔是什么吊骤? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任缎岗,我火速辦了婚禮,結(jié)果婚禮上白粉,老公的妹妹穿的比我還像新娘传泊。我一直安慰自己,他們只是感情好鸭巴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布眷细。 她就那樣靜靜地躺著,像睡著了一般鹃祖。 火紅的嫁衣襯著肌膚如雪溪椎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天恬口,我揣著相機(jī)與錄音校读,去河邊找鬼。 笑死祖能,一個(gè)胖子當(dāng)著我的面吹牛歉秫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播养铸,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼端考,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了揭厚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤扶供,失蹤者是張志新(化名)和其女友劉穎筛圆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椿浓,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡太援,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扳碍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片提岔。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笋敞,靈堂內(nèi)的尸體忽然破棺而出碱蒙,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布赛惩,位于F島的核電站哀墓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喷兼。R本人自食惡果不足惜篮绰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望季惯。 院中可真熱鬧吠各,春花似錦、人聲如沸勉抓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琳状。三九已至磕瓷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間念逞,已是汗流浹背困食。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翎承,地道東北人硕盹。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叨咖,于是被迫代替她去往敵國(guó)和親瘩例。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容