HarmonyOS Canvas绘制出来的添加onTouch手势,但是无法移动
Canvas绘制出来的添加onTouch手势,拖动图标,给图标新的位置,但是无法移动,icon图标在附件中,代码如下:
@Entry
@Component
struct CanvasExample {
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
private img: ImageBitmap = new ImageBitmap("/common/images/seek_bar_icon.png");
private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)
@State leftTargetX: number = 100;
@State leftTargetY: number = 40;
@State rightTargetX: number = 300;
@State rightTargetY: number = 40;
@State pointSize: number = 20;
@State lineStart: number = 25;
@State lineEnd: number = 337;
@State lineY: number = 50;
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('100%')
.height('100%')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.lineWidth = 8;
this.context.beginPath();
this.context.strokeStyle = "#F0F0F0";
this.context.lineCap = 'round';
this.context.moveTo(this.lineStart, this.lineY);
this.context.lineTo(this.lineEnd, this.lineY);
this.context.stroke();
// 使用drawImage接口将图片画在(0,0)为起点,宽高130的区域
this.context.drawImage(this.img, 0, 0, this.pointSize, this.pointSize, this.leftTargetX, this.leftTargetY, this.pointSize, this.pointSize);
this.context.drawImage(this.img, 0, 0, this.pointSize, this.pointSize, this.rightTargetX, this.rightTargetY, this.pointSize, this.pointSize);
})
.onTouch((event: TouchEvent) => {
let x = event.touches[0].x;
let y = event.touches[0].y;
this.leftTargetX = x;
//左边范围
if (x >= (this.lineStart - this.pointSize / 2)
&& x < this.rightTargetX - this.pointSize / 2
&& y >= this.lineY - this.pointSize
&& y <= this.lineY + this.pointSize) {
this.leftTargetX = x;
console.log(`CanvasExample left====x==${x}==y==${y}`)
}
//右边
if (x > (this.leftTargetX + this.pointSize / 2)
&& x <= this.lineEnd + this.pointSize / 2
&& y >= this.lineY - this.pointSize
&& y <= this.lineY + this.pointSize) {
this.rightTargetX = x;
console.log(`CanvasExample right====x==${x}==y==${y}`)
}
})
}
.width('100%')
.height('100%')
}
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS使用Canvas自定义绘制内容后,如何根据onTouch事件动态更新绘制的内容?
428浏览 • 1回复 待解决
在项目里放一张图片然后绘制在canvas上是可以绘制出来的,但是如果把图片路径改成沙箱内的路径,绘制不成功
6673浏览 • 1回复 待解决
HarmonyOS LongPressGesture手势移动问题
486浏览 • 1回复 待解决
HarmonyOS 子窗口是否可手势移动
70浏览 • 1回复 待解决
如何操作canvas重新绘制
1101浏览 • 1回复 待解决
Canvas绘制内容如何动态更新
1649浏览 • 1回复 待解决
HarmonyOS Canvas中如何绘制文本溢出效果?
314浏览 • 1回复 待解决
HarmonyOS Canvas中关于绘制图片问题
385浏览 • 1回复 待解决
Canvas如何触发刷新重复绘制?
953浏览 • 1回复 待解决
canvas怎么绘制资源目录下的图片
665浏览 • 1回复 待解决
HarmonyOS 如何实现清除canvas内容,重新绘制?
438浏览 • 1回复 待解决
如何使用canvas绘制圆角矩形
546浏览 • 1回复 待解决
添加lib时【兼容的SDK最低版本】刷不出来,无法正常添加库
4848浏览 • 1回复 待解决
HarmonyOS 怎么区分缩放地图和手势触发移动地图
622浏览 • 1回复 待解决
HarmonyOS UI组件是否能支持绘制到canvas上
28浏览 • 1回复 待解决
HarmonyOS 使用Canvas 绘制线条的时候,线条的头部尾部能否是圆角
29浏览 • 1回复 待解决
如何使用canvas添加水印
1333浏览 • 1回复 待解决
Hyperlink的onTouch预览报错
1992浏览 • 1回复 待解决
HarmonyOS app模块拆分,图标在A模块,A模块绘制绘制不出来,但A不是根模块
399浏览 • 1回复 待解决
HarmonyOS Canvas.drawImage怎么绘制本地图片,并指定大小?
154浏览 • 0回复 待解决
#鸿蒙通关秘籍#鸿蒙Canvas组件如何实现文本绘制?
98浏览 • 1回复 待解决
Canvas如何绘制app.media下面的图片?
2365浏览 • 1回复 待解决
HarmonyOS Canvas.drawImage怎么绘制本地图片,并指定大小
39浏览 • 1回复 待解决
HarmonyOS CustomDialogController无法在jsbridge弹出来
321浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Canvas组件上绘制文本?
108浏览 • 1回复 待解决
可以使用onTouch事件判断触摸点是否是可移动区域,再通过PanGesture
链接:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-gestures-pangestur
手势控制坐标点的移动,提供以下案例参考:
onTouch事件是开始刚触摸到屏幕时会触发,但是现在需要实现的需求是在拖动时画布上的元素变化,需要记录手指/鼠标的偏移量,所以使用PanGesture拖动手势更合适
开发者也可以只使用PanGesture拖动,代码样例: