HarmonyOS 鸿蒙Next在Stack上根据手指点击地方动态增加小圆点,然后1秒后淡出,如何来实现,大佬们提供下思路

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next在Stack上根据手指点击地方动态增加小圆点,然后1秒后淡出,如何来实现,大佬们提供下思路

在Stack上根据手指点击地方动态增加小圆点,然后1秒后淡出,如何来实现,大佬们提供下思路

可以连续不停的点击,后面的点击不会影响前面点击出来小圆点的动画

5 回复

点击事件获取到相对于屏幕的坐标,然后小点的top和left设置成点的位置的y和x就行。小圆点的话你可以通过map或者数组记录下key和位置,然后在stack中循环渲染数据,在创建的时候设置定时删除数据就好了。

位置记录都ok,就是在点击第二次的时候,修改了点击的数组,数据变化,又重新渲染了。导致第一个动画还没结束又被重新渲染重头开始了,主要是这块不知道怎么解决

像这样可以,我试了,我我方法先创建一个固定长度的数组,这个长度是在单位时间内大致不会超过的;然后通过index定位修改top、left和is从而实现显示,同时定时1秒隐藏;这样我看了下可以实现你说的那个效果。

@Entry @Component struct Index { @State indexs: test[] = []; @State index: number = 0;

aboutToAppear(): void { // 初始化数据 for (let i = 0; i < 20; i++) { this.indexs.push(new test(0, 0)) } }

build() { Stack() { ForEach(this.indexs, (test: test)=>{ Dot({test: test}) }, (test: test, index: number)=>{ return test.top + “:” + test.left + “:” + index }) }.width(“100%”) .height(“100%”) .alignContent(Alignment.TopStart) .onClick((e)=>{ this.indexs[this.index].top = e.y; this.indexs[this.index].left = e.x; this.indexs[this.index].display(); this.index = this.index+1>=20?0:this.index+1 }) } }

@Component struct Dot{ @ObjectLink test: test private w: number = 15 build() { if (this.test.is){ Row().width(this.w).height(this.w).borderRadius(this.w).backgroundColor(“red”) .margin({left: this.test.left, top: this.test.top}) .transition({ opacity: 0 }) } } }

@Observed class test { top: number; left: number; is: boolean = false;

constructor(top: number, left: number) { this.top = top; this.left = left; }

display() { animateTo({duration: 400}, ()=>{ this.is = true; }) setTimeout(() => { this.hide(); }, 1000) }

hide() { animateTo({duration: 400}, ()=>{ this.is = false; }) } }

太溜了,大佬

在HarmonyOS中实现根据手指点击位置动态增加小圆点并在1秒后淡出的效果,可以通过以下几个步骤来实现:

  1. 捕获触摸事件:在你的页面或组件中,通过重写onTouchEvent方法来捕获用户的触摸事件(如点击)。在此方法中,你可以获取到触摸点的位置(MotionEvent.getX()MotionEvent.getY())。

  2. 动态创建小圆点:根据触摸点的位置,动态创建一个小圆点(如使用Canvas绘制,或者通过添加一个自定义的View/组件)。这个小圆点需要设置其位置和初始透明度(可能是完全不透明)。

  3. 使用动画淡出:为小圆点设置一个淡出动画,可以使用AnimatorValueAnimator来改变其透明度,在1秒内从完全不透明渐变到完全透明。

  4. 管理小圆点:你可能需要维护一个小圆点的集合,以便在需要时能够更新它们的状态(如移除已淡出的小圆点)。

  5. 性能优化:注意控制小圆点的数量,避免过多的动态元素导致性能问题。可以考虑使用RecyclerView或类似的列表组件来优化显示。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。注意,这里提供的官网地址是示例性的,请替换为HarmonyOS或你所使用的开发框架的实际官方支持地址。

回到顶部