前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自学HarmonyOS应用开发(59)- 处理拖动事件

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

作者头像
面向对象思考
发布2021-08-06 13:12:58
4850
发布2021-08-06 13:12:58
举报

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

实现DraggedListener

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

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完整代码可以从以下链接下载:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档