HarmonyOS 鸿蒙Next在Stack上根据手指点击地方动态增加小圆点,然后1秒后淡出,如何来实现,大佬们提供下思路
HarmonyOS 鸿蒙Next在Stack上根据手指点击地方动态增加小圆点,然后1秒后淡出,如何来实现,大佬们提供下思路
在Stack上根据手指点击地方动态增加小圆点,然后1秒后淡出,如何来实现,大佬们提供下思路
可以连续不停的点击,后面的点击不会影响前面点击出来小圆点的动画
点击事件获取到相对于屏幕的坐标,然后小点的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秒后淡出的效果,可以通过以下几个步骤来实现:
-
捕获触摸事件:在你的页面或组件中,通过重写
onTouchEvent
方法来捕获用户的触摸事件(如点击)。在此方法中,你可以获取到触摸点的位置(MotionEvent.getX()
和MotionEvent.getY()
)。 -
动态创建小圆点:根据触摸点的位置,动态创建一个小圆点(如使用
Canvas
绘制,或者通过添加一个自定义的View
/组件)。这个小圆点需要设置其位置和初始透明度(可能是完全不透明)。 -
使用动画淡出:为小圆点设置一个淡出动画,可以使用
Animator
或ValueAnimator
来改变其透明度,在1秒内从完全不透明渐变到完全透明。 -
管理小圆点:你可能需要维护一个小圆点的集合,以便在需要时能够更新它们的状态(如移除已淡出的小圆点)。
-
性能优化:注意控制小圆点的数量,避免过多的动态元素导致性能问题。可以考虑使用
RecyclerView
或类似的列表组件来优化显示。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。注意,这里提供的官网地址是示例性的,请替换为HarmonyOS或你所使用的开发框架的实际官方支持地址。