HarmonyOS Next开发----k线图滑动问题

前言

最近做股票软件鸿蒙版本的适配,K线趋势图的手势交互上遇到了问题,这里记录下~

功能需求:

实现k线趋势图滑动及fling的效果

思路:

1. 借鉴Flutter版本的思路,在K线趋势图上面叠加一个Scroll布局,使用系统提供给我们的Scroller来计算手势滑动及fling效果。
2. 监听滑动手势PanGesture来处理,fling的惯性滑动效果需要自己模拟计算。

 Scroll(this.mScroller) {Text('').width('100%')}.onAreaChange((oldValue: Area, newValue: Area)=>{this.mScroller.scrollEdge(Edge.End)}).height('100%').width(this.getTotalKLineWidth() + 200).scrollable(ScrollDirection.Horizontal).scrollBar(BarState.On).friction(0.5).onScroll((xOffset, yOffset)=>{let result: boolean = this.mGestureHelper.scroll(this.mScroller.currentOffset().xOffset, this.getTotalKLineWidth());if (result) {this.onDraw();}}).gesture(GestureGroup(GestureMode.Parallel,LongPressGesture().onAction((event?: GestureEvent) => {if (!this.mCanHorizontalScroll) {this.mCanHorizontalScroll = true;}this.setCrossState(UPMarketUIGestureHelper.CROSS_STATE_SHOW);this.mGestureHelper.updateCrossPoint(event?.fingerList[0].localX, event?.fingerList[0].localY);this.onDraw();}).onActionEnd((event?: GestureEvent) => {this.setCrossState(UPMarketUIGestureHelper.CROSS_STATE_NORMAL);this.onDraw();}).onActionCancel((event?: GestureEvent) => {this.setCrossState(UPMarketUIGestureHelper.CROSS_STATE_NORMAL);this.onDraw();})), GestureMask.Normal)

由于k线趋势图初始位置是展示最新的k线,然而Scroller不能设置初始位置,尝试在onAreaChange中滑动到最后,但是会有动画效果,所以这个思路实现不了。

使用平移手势接口:

.gesture(GestureGroup(GestureMode.Parallel,PanGesture({ direction: this.mCanHorizontalScroll ? PanDirection.All : PanDirection.Horizontal, distance: 1}).onActionStart(() => {if (!this.mIsLongPressed) {this.mGestureHelper.startScroll();}}).onActionEnd(() => {this.mGestureHelper.stopScroll();this.onDraw();}).onActionUpdate((event?: GestureEvent) => {if (event) {if (this.mIsLongPressed) {let reallyOffsetX: number = event.offsetX - this.mLastOffsetX;let reallyOffsetY: number = event.offsetY - this.mLastOffsetY;this.mLastOffsetX = event.offsetX;this.mLastOffsetY = event.offsetY;this.mCrossTouchPoint.offset(reallyOffsetX, reallyOffsetY);this.mCrossTouchPoint.y = Math.max(this.mMainRenderTitleHeight + 1, this.mCrossTouchPoint.y);this.mCrossTouchPoint.y = Math.min(this.totalHeight - 1, this.mCrossTouchPoint.y);this.mGestureHelper.updateCrossPoint(this.mCrossTouchPoint.x, this.mCrossTouchPoint.y);this.onDraw();} else {if (this.mGestureHelper.scroll(event.offsetX, this.totalWidth)) {this.onDraw();}}}}),LongPressGesture().onAction((event?: GestureEvent) => {if (!this.mCanHorizontalScroll) {this.mCanHorizontalScroll = true;}this.setCrossState(UPMarketUIGestureHelper.CROSS_STATE_SHOW);this.mCrossTouchPoint.set(event?.fingerList[0].localX, event?.fingerList[0].localY);this.mGestureHelper.updateCrossPoint(this.mCrossTouchPoint.x, this.mCrossTouchPoint.y);this.onDraw();}).onActionEnd((event?: GestureEvent) => {this.setCrossState(UPMarketUIGestureHelper.CROSS_STATE_NORMAL);this.onDraw();}).onActionCancel((event?: GestureEvent) => {this.setCrossState(UPMarketUIGestureHelper.CROSS_STATE_NORMAL);this.onDraw();}),PinchGesture().onActionStart(() => {this.mGestureHelper.startScale();}).onActionUpdate((event) => {console.log("UPMarketUISDK  PinchGesture scale: " + event.scale);if(this.mGestureHelper.scale(event.scale)) {this.onDraw();}})), GestureMask.Normal)

使用PanGesture也可以实现滑动效果,但是松手惯性滑动需要自己计算。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

parted命令进行磁盘分区

1.使用lsblk 查看可用的磁盘 可以看到有sdb sdc两个物理盘还未挂载 2.使用parted命令分区(以sdb为例) 按需要把sdb分成4个逻辑分区 新建磁盘标签类型为gpt 出现提示,输入yes 开始分区: (1)输入mkpart回车,提示输入分区名称,按习惯可命名为sdb1(后面依次sdb2、sdb3)…

LeetCode每日一题 | 1696. 跳跃游戏 VI

文章目录 题目描述问题分析程序代码 题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i 1, min(…

部署篇 | MatrixOne与MySQL全面对比

MatrixOne是一款高度兼容MySQL语法的HTAP数据库,在大部分场景下可以直接实现对MySQL的替换。 作为一款开源数据库,MatrixOne 选用对开发者友好的 Apache-2.0 License,支持在主流的 Linux 和 MacOS 系统中直接进行物理部署。在部署方式上&…

JVM 性能调优 - 参数基础(2)

查看 JDK 版本 $ java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode) 查看 Java 帮助文档 $ java -help 用法: java [-options] class [args...] …

Python中的for循环用法详解,一文搞定它

文章目录 for循环1.for循环的基本语法(1)遍历不等长多级容器(2)遍历不等长多级容器(3)遍历等长的容器 2.变量的解包3.for...else【详细讲解】4.range对象5.总结6.打印 1 ~ 10 跳过57.打印菱形小星星 for循环…

【Linux】select、poll、epoll代码

将fd设置成非阻塞 void setNonBlock(int fd) {int res fcntl(fd, F_GETFL);if (res < 0){std::cerr << "错误" << strerror(errno) << std::endl;return;}fcntl(fd, F_SETFL, res | O_NONBLOCK); } select 1.select系统调用是用来让我们的程…

【ESP32+Python】WIFI连接包括固定账号密码+选择WIFI在输入密码

import network import time# 创建WLAN对象 wlan network.WLAN(network.STA_IF)def scan_and_display_wifi_networks():# 激活接口wlan.active(True)# 扫描附近的WiFi网络networks wlan.scan()print("可用的WiFi网络&#xff1a;")for i, net in enumerate(network…

leetcode 744.寻找比目标字母大的最小字母

本题是二分查找板块中的一个简单题目&#xff0c;不过二分查找比较注重于细节。所以我会着重点出来。 思考&#xff1a;从查找字母这一个要求来说&#xff0c;我们要么选择遍历&#xff0c;要么选择二分查找&#xff0c;因为这里是非递减的&#xff0c;那么我们自然的就会想到…

Flink 动态表 (Dynamic Table) 解读

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

鸿蒙 WiFi 扫描流程(2)

接着上篇没有记录完的&#xff0c;我们继续梳理&#xff0c;需要上一篇做基础的请看&#xff1a;鸿蒙 WiFi 扫描流程&#xff08;1&#xff09; 上一篇我们讲到 scan_service.cpp 里面的 SingleScan 方法&#xff0c;继续这个方法往下看&#xff1a; // foundation/communicat…

Python基础知识:Python函数的定义、创建与调用

Python本质上是一种编程语言&#xff0c;通过编写运行代码的方式实现工作目标。读者可以想象&#xff0c;如果针对机器学习或数据统计分析的每种方法或统计量计算都要用户自行编写代码&#xff0c;那么显然在很多情况下是无法满足用户便捷开展分析的要求的&#xff0c;用户体验…

docer compose部署simple-docker

简介 一个看似简陋但是功能足够用的docker管理工具 安装 创建目录 mkdir -p /opt/simple-docker cd /opt/simple-docker 创建并启动容器 编写docker-compose.yml文件,内容如下 version: 3 services: redis: image: redis:latest restart: always web: image: registry.cn-…

HR看了都想点开的简历:吸睛模板+撰写技巧

工作致富的第一步&#xff1a;写一份好的简历。一个独特、简单、清晰的个人简历模板可以更好地吸引雇主的注意和兴趣&#xff0c;并帮助你在许多求职者中脱颖而出。如何制作一份令人印象深刻的简历&#xff1f;巧妙地使用个人简历模板是一个不错的选择。在本文中&#xff0c;我…

线性代数:矩阵的初等变换

目录 一、初等行变换 行阶梯 / 行最简 性质 二、矩阵的标准型 三、矩阵的等价 四、初等矩阵 五、重要性质与定理 一、初等行变换 行阶梯 / 行最简 性质 二、矩阵的标准型 三、矩阵的等价 四、初等矩阵 五、重要性质与定理

Java快速输入输出的实现

在Java编程中&#xff0c;我们经常需要从标准输入读取数据&#xff0c;或者将结果输出到标准输出。为了提高输入输出的效率&#xff0c;我们可以使用快速输入输出的方法。下面是一个示例类Read&#xff0c;它提供了一系列方法来实现快速的输入输出操作。 import java.io.*;cla…

Git - 每次 git pull/push 时需要账号和密码解决方案

问题描述 在提交项目代码或者拉取代码的时候&#xff0c;每次 git 都要输入用户名密码&#xff0c;很烦~ 解决方案 让服务器记下来用户名和密码&#xff0c;此时输入一次&#xff0c;以后再 git push /pull 的时候就不用再输账号和密码了 # 配置 git 记录用户名和密码 git c…

租游戏服务器多少钱1个月?一年价格多少?

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;可以选择轻量应用服务器和云服务器&#xff0c;阿腾云atengyu…

SpringBoot注解--04--01--注解@Mapper在IDEA中自动注入警告的解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 问题原因 解决方案方法1&#xff1a;为 Autowired 注解设置required false方法2&#xff1a;用 Resource 替换 Autowired方法3&#xff1a;在Mapper接口上加上Repo…

跟着pink老师前端入门教程-day19

一、移动WEB开发之流式布局 1、 移动端基础 1.1 浏览器现状 PC端常见浏览器&#xff1a;360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。 移动端常见浏览器&#xff1a;UC浏览器&#xff0c;QQ浏览器&#xff0c;欧朋浏览器&#xff0…

论文阅读-Transformer-based language models for software vulnerability detection

「分享了一批文献给你&#xff0c;请您通过浏览器打开 https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/ 您还可以一键导入到 ivySCI 文献管理软件阅读&#xff0c;并在论文中引用 」 本文主旨&#xff1a;本文提出了一个系统的框架来利用基于Transformer的语…