
鸿蒙模仿抖音点赞-harmonyOS
发布日期:2021-05-06 22:10:25
浏览次数:21
分类:原创文章
本文共 3910 字,大约阅读时间需要 13 分钟。
import com.mytoutou.cehua.ResourceTable;import ohos.agp.animation.Animator;import ohos.agp.animation.AnimatorProperty;import ohos.agp.components.*;import ohos.multimodalinput.event.TouchEvent;import java.util.Random;public class MainPageListener implements Component.TouchEventListener { private DirectionalLayout page; private float lastY; private float lastX; private float currentY; private float currentX; private int pointId; private float distance; public MainPageListener(DirectionalLayout page) { this.page = page; } @Override public boolean onTouchEvent(Component component, TouchEvent ev) { int action = ev.getAction(); switch (action) { case TouchEvent.PRIMARY_POINT_DOWN: pointId = ev.getPointerId(ev.getIndex()); lastY = currentY = ev.getPointerPosition(pointId).getY(); lastX = currentX = ev.getPointerPosition(pointId).getX(); //取中心---显示 //创建一个点赞装下love的容器,在里面放一张love图片 DirectionalLayout love = new DirectionalLayout(page.getContext()); love.setWidth(200); love.setHeight(200); Image image = new Image(page.getContext()); image.setWidth(200); image.setHeight(200); image.setPixelMap(ResourceTable.Media_dz_heart_1); love.addComponent(image); StackLayout pageStack = (StackLayout) page.findComponentById(ResourceTable.Id_page_a_stack); pageStack.addComponent(love); //随机左右倾斜一个角度--->向倾斜的方向移动并且移动过放大逐渐淡化消失 //爱心所在的位置 love.setContentPosition(lastX, lastY); //(1)、第一种方式 float v = getRandomRotateValue(-35F, -25F, -0F, 25F, 35F); //创建一个属性动画 AnimatorProperty animatorProperty = new AnimatorProperty(); //属性动画塞入需要执行的动画内容 animatorProperty.setTarget(love); animatorProperty.setStateChangedListener(new Animator.StateChangedListener() { @Override public void onStart(Animator animator) { } @Override public void onStop(Animator animator) { } @Override public void onCancel(Animator animator) { } @Override public void onEnd(Animator animator) { //动画结束之后将其移除掉 pageStack.removeComponent(love); } @Override public void onPause(Animator animator) { } @Override public void onResume(Animator animator) { } }); animatorProperty.rotate(v)//每次随机旋转的角度 .setDuration(800)//动画持续800ms(毫秒) .scaleX(2.5F)//向x轴放大2.5倍 .scaleY(2.5F)//向y轴放大2.5倍 .moveByY(-300)//向上是负值,向下是正值---移动x个像素 .alpha(0) .start();//这个线性函数---理解渐渐消失 //(1)、第一种方式 break; case TouchEvent.POINT_MOVE: currentY = ev.getPointerPosition(pointId).getY(); distance = currentY - lastY; page.setMarginBottom(page.getMarginBottom() + (int) distance); break; case TouchEvent.PRIMARY_POINT_UP: break; } return true; } //随机1-5个数的角度 private float getRandomRotateValue(float... rotate) { Random r = new Random(); int a = r.nextInt(4) + 1; return randomZF() == 0 ? rotate[a] : -rotate[a]; } //随机0或1是为了取角度正负数 private float randomZF() { return new java.util.Random().nextBoolean() ? 1 : 0; }}
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月29日 10时16分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[UWP]从头开始创建并发布一个番茄钟
2019-03-06
WinUI 3 Preview 3 发布了,再一次试试它的性能
2019-03-06
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
2019-03-06
List数组排序
2019-03-06
VMware vSphere 离线虚拟机安装 BIND 9
2019-03-06
dojo/request模块整体架构解析
2019-03-06
Javascript定时器学习笔记
2019-03-06
dojo的发展历史
2019-03-06
Python存储系统(Redis)
2019-03-06
C语言指针收藏
2019-03-06
C#搞个跨平台的桌面NES游戏模拟器
2019-03-06
手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)
2019-03-06
《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖
2019-03-06
互联网App应用程序测试流程及测试总结
2019-03-06
根据轨迹分析出用户家在哪
2019-03-06
PostgreSQL查询表名称及表结构
2019-03-06
linux中使用awk命令
2019-03-06
如何使用google搜索?
2019-03-06
Redis分布式锁的正确实现方式
2019-03-06
设计模式-抽象工厂模式
2019-03-06