自學(xué)HarmonyOS應(yīng)用開發(fā)(59)- 處理拖動事件

地圖軟件的一個常用功能就是地圖拖動功能,本文介紹它是如何實(shí)現(xiàn)的。
實(shí)現(xiàn)DraggedListener
在Harmony應(yīng)用中通過實(shí)現(xiàn)Component.DraggedListener接口處理拖動事件,這個接口的方法一共有6個,這里我們只是用其中的3個:
onDragPreAccept用于判斷是否接受某個拖動操作,這里我們一律返回true,表示接受所有的拖動操作。
Component.DraggedListener dragListener = new Component.DraggedListener(){public void onDragDown(Component component, DragInfo dragInfo) {HiLog.info(LABEL, "TileMap.onDragDown!");}public void onDragStart(Component component, DragInfo dragInfo) {HiLog.info(LABEL, "TileMap.onDragStart Start!");dragStart = dragInfo.startPoint;dragStartLocation = location;HiLog.info(LABEL, "TileMap.onDragStart End!");}public void onDragUpdate(Component component, DragInfo dragInfo) {HiLog.info(LABEL, "TileMap.onDragUpdate Start!");Point offset = Tile.calculateOffset(512, zoom, location,dragInfo.updatePoint.getPointX() - dragStart.getPointX(),dragInfo.updatePoint.getPointY() - dragStart.getPointY());location = new Location(dragStartLocation.getLatitude() - offset.getPointY(),dragStartLocation.getLongitude() - offset.getPointX());invalidate();HiLog.info(LABEL, "TileMap.onDragUpdate End!");}public void onDragEnd(Component component, DragInfo dragInfo) {HiLog.info(LABEL, "TileMap.onDragEnd!");}public void onDragCancel(Component component, DragInfo dragInfo) {HiLog.info(LABEL, "TileMap.onDragCancel!");}public boolean onDragPreAccept(Component component, int dragDirection) {return true;}};
開始拖動時,系統(tǒng)會調(diào)用onDragStart方法,在這個方法里我們可以記錄一些拖動的開始信息,例如觸摸位置和顯示中心的經(jīng)緯度信息;
在整個拖動過程中,系統(tǒng)會不斷調(diào)用onDragUpdate方法。我們在這里獲取新的觸摸位置并計算這個位置和開始位置之間的移動距離,接下來將這個距離轉(zhuǎn)換為經(jīng)緯度偏移量并用它修正顯示中心的經(jīng)緯度信息。
動作效果
以下是用單指拖動地圖時的顯示效果:
參考代碼
完整代碼可以從以下鏈接下載:
https://github.com/xueweiguo/Harmony/tree/master/StopWatch
作者著作介紹
《實(shí)戰(zhàn)Python設(shè)計模式》是作者去年3月份出版的技術(shù)書籍,該書利用Python 的標(biāo)準(zhǔn)GUI 工具包tkinter,通過可執(zhí)行的示例對23 個設(shè)計模式逐個進(jìn)行說明。這樣一方面可以使讀者了解真實(shí)的軟件開發(fā)工作中每個設(shè)計模式的運(yùn)用場景和想要解決的問題;另一方面通過對這些問題的解決過程進(jìn)行說明,讓讀者明白在編寫代碼時如何判斷使用設(shè)計模式的利弊,并合理運(yùn)用設(shè)計模式。

對設(shè)計模式感興趣而且希望隨學(xué)隨用的讀者通過本書可以快速跨越從理解到運(yùn)用的門檻;希望學(xué)習(xí)Python GUI 編程的讀者可以將本書中的示例作為設(shè)計和開發(fā)的參考;使用Python 語言進(jìn)行圖像分析、數(shù)據(jù)處理工作的讀者可以直接以本書中的示例為基礎(chǔ),迅速構(gòu)建自己的系統(tǒng)架構(gòu)。
覺得本文有幫助?請分享給更多人。
關(guān)注微信公眾號【面向?qū)ο笏伎肌枯p松學(xué)習(xí)每一天!
面向?qū)ο箝_發(fā),面向?qū)ο笏伎迹?/span>
