专栏首页C++核心准则原文翻译自学HarmonyOS应用开发(59)- 处理拖动事件

自学HarmonyOS应用开发(59)- 处理拖动事件

地图软件的一个常用功能就是地图拖动功能,本文介绍它是如何实现的。

实现DraggedListener

在Harmony应用中通过实现Component.DraggedListener接口处理拖动事件,这个接口的方法一共有6个,这里我们只是用其中的3个:

onDragPreAccept用于判断是否接受某个拖动操作,这里我们一律返回true,表示接受所有的拖动操作。

Component.DraggedListener dragListener = new Component.DraggedListener(){

    @Override
    public void onDragDown(Component component, DragInfo dragInfo) {
        HiLog.info(LABEL, "TileMap.onDragDown!");
    }

    @Override
    public void onDragStart(Component component, DragInfo dragInfo) {
        HiLog.info(LABEL, "TileMap.onDragStart Start!");
        dragStart = dragInfo.startPoint;
        dragStartLocation = location;
        HiLog.info(LABEL, "TileMap.onDragStart End!");
    }

    @Override
    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!");
    }

    @Override
    public void onDragEnd(Component component, DragInfo dragInfo) {
        HiLog.info(LABEL, "TileMap.onDragEnd!");
    }

    @Override
    public void onDragCancel(Component component, DragInfo dragInfo) {
        HiLog.info(LABEL, "TileMap.onDragCancel!");
    }

    @Override
    public boolean onDragPreAccept(Component component, int dragDirection) {
        return true;
    }
};

开始拖动时,系统会调用onDragStart方法,在这个方法里我们可以记录一些拖动的开始信息,例如触摸位置和显示中心的经纬度信息;

在整个拖动过程中,系统会不断调用onDragUpdate方法。我们在这里获取新的触摸位置并计算这个位置和开始位置之间的移动距离,接下来将这个距离转换为经纬度偏移量并用它修正显示中心的经纬度信息。

动作效果

以下是用单指拖动地图时的显示效果:

参考代码

完整代码可以从以下链接下载:

https://github.com/xueweiguo/Harmony/tree/master/StopWatch

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自学HarmonyOS应用开发(64)- 处理屏幕旋转

    旋转屏幕是手机用户的一个日常操作,本文介绍如何在屏幕旋转时自动调整屏幕布局的方法。效果如下:

    面向对象思考
  • 自学HarmonyOS应用开发(47)- 自定义switch组件

    HarmonyOS应用开发都会用到各种各样的UI组件,开发者可以根据需求在布局文件设定UI组件各种属性。但是需求是多种多样

    面向对象思考
  • 自学HarmonyOS应用开发(48)- Tablist组件进阶

    但是有一个问题是这篇文章,包括HarmonyOS应用开发的官方文档都只是实现了Tab切换的基本功能,对于每个Tab页内组件的处理没有详细说明。本文就来补上这个短...

    面向对象思考
  • 鸿蒙(HarmonyOS)API的源代码去哪了?竟然全抛出异常,原来使用的是虚拟API!

    不管是鸿蒙(HarmonyOS),或是Android、还是其他系统。理解其工作原理最好的方式就是阅读源代码。不过HarmonyOS的所有系统类,跟踪进去,全部是...

    蒙娜丽宁
  • 【第22期】HarmonyOS应用开发(基础篇)

    这不就是说,以后华为手机都是鸿蒙系统了嘛?鸿蒙还发出了一条视频,视频中显示2021年6月2号将开启鸿蒙操作系统及华为全场景新品发布会。预计现在支持EMUI11升...

    siberiawolf
  • HarmonyOS与Android的全面对比

    第二是我个人非常看好鸿蒙系统的未来,清楚明白华为和一些民族企业担负的责任和国人的期待,虽然带着一些民族感情;鸿蒙刚发布的时候自己是非常激动的,但是后来项目太忙一...

    肉眼品世界
  • HarmonyOS 生态,投入还是继续观望?

    HarmonyOS 2.0 从首次亮相至今快满一年,回顾过去一年里的关键节点:2020 年 9 月在华为开发者大会上,HarmonyOS 2.0 首次亮相;20...

    深度学习与Python
  • HarmonyOS简介

    前两天,华为发布了HarmonyOS 2.0,俺也赶个时髦,给大家简单介绍下HarmonyOS。

    xiangzhihong
  • 搭建鸿蒙编译环境(VMware+Linux)

    分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发任务和传输数据。分布式软总线示意图见。

    跋扈洋
  • 技术分析 | HarmonyOS到底是不是Android套皮?

    最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。

    刘盼
  • 基于 Hi3861 平台的 HarmonyOS Device 开发体验

    编程界有个传承了几十年的”规矩“--入门先从环境搭建开始,有的时候环境搭建比较简单,比如学习 HTML 编程,有浏览器就行;有时候又比较繁琐,比如 React ...

    胡琦
  • 自学HarmonyOS应用开发(65)- 为Tab组件使用图像资源

    用图像装饰UI组件可以让应用显得更专业,本文介绍Tab组件使用图像资源的方法。先看动作效果:

    面向对象思考
  • 十问华为HarmonyOS:开源一个月,开发者生态建设进度如何?

    基础软件的开源面临着非常大的挑战,除了技术研发困难重重,开源生态和社区的建设更是难上加难。9 月 10 日,在华为开发者大会 2020 上,华为消费者业务 CE...

    深度学习与Python
  • 鸿蒙和安卓,到底有什么区别?

    在 9 月 10 日召开的华为开发者大会上,宣布了鸿蒙2.0 系统正式面世,同时开启了 Beta 版本的测试和开源网站。

    杰哥的IT之旅
  • 《鸿蒙理论知识04》HarmonyOS概述之系统定义

    【摘要】 系统定位 HarmonyOS 是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体 娱乐等)的分布式操作系统。在传统的单设备系统能力的基...

    阿峰博客
  • 【HarmonyOS 专题】01 基础 Mac 环境安装配置

    HarmonyOS 已于 2020 年 12 更新到 2.0 版本;和尚周围的人都在学习和研究,和尚也想学习一下;今天和尚从 0 开始学习,第一步简单介绍基础...

    阿策小和尚
  • 抢先学鸿蒙(HarmonyOS)2.0,你就是下一个大咖!

    2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0。HarmonyOS是全场景操作系统。也就是说,从理论上,HarmonyOS可以在任何...

    蒙娜丽宁
  • 鸿蒙(HarmonyOS)IDE迎来重大更新,新特性足以让你尖叫!

    鸿蒙(HarmonyOS)最新版的IDE Beta3于2021-03-31日发布,beta3增加了很多吸引人的功能,这些功能有一些与编程有关,有一些与配置、模板...

    蒙娜丽宁
  • 【HarmonyOS 专题】02 搭建简单登录页面

    和尚在搭建完 HarmonyOS 环境之后,有很长时间没有研究过 HarmonyOS,DevEco Studio 已经更新了多个版本,和尚在升级完 ID...

    阿策小和尚

扫码关注云+社区

领取腾讯云代金券