最近需求要做一个小球上升再下降的抛物线运动,类似太阳东升西落的动画。

在网上找了好久,好多的抛物线都是平抛,用于购物车添加效果。

于是自己动手,做了一个完整的向上抛物线的动画。

首先要区分两个概念,一个是VIew的坐标系,如下图(来自网络)

另外一个就是Animation动画的坐标,最开始,我以为动画是在View坐标系上进行的。研究之后才发现,Animation有自己的坐标,跟View的坐标没有关系。如下(图片来源于网络),动画的坐标原点是VIew动画开始的起点(左上角)

所以要实现完整的抛物线运动,首先要通过计算,算出抛物线的起点、顶点、终点。通过设置动画参数就可以了

首先确定抛物线的原点(TextView的中心),然后在通过对这个坐标在X轴Y轴上加减得到起点。顶点、终点。

private void initLocation(TextView textView) {

//获取抛物线原点坐标

int[] point_location = new int[2];

textView.getLocationInWindow(point_location);

int pointX = point_location[0] - textView.getWidth() / 2;

int pointY = point_location[1] - textView.getHeight() / 2;

//获取抛物线起点坐标

startX = pointX - 500;

startY = pointY;

//获取抛物线顶点坐标

topX = pointX;

topY = pointY - 800;

//获取抛物线终点坐标

endX = pointX + 500;

endY = pointY;

}

最后就可以做动画啦,动画分为上升和下降两个部分

/**

* 抛物线 上升动画

*/

@TargetApi(11)

public void playUpAnimation() {

initLocation(tvPoint);

moveingIV = (ImageView) getLayoutInflater().inflate(R.layout.animator_image, null);

anim_mask_layout.addView(moveingIV);//把动画图片添加到动画层

addViewToAnimLayout(moveingIV, startX, startY);

//抛物线动画,原理:两个位移动画,一个横向匀速移动,一个纵向变速移动,两个动画同时执行,就有了抛物线的效果。

ObjectAnimator translateAnimationX = ObjectAnimator.ofFloat(moveingIV, "translationX", 0, topX - startX);

translateAnimationX.setDuration(800);

translateAnimationX.setInterpolator(new AccelerateInterpolator());

ObjectAnimator translateAnimationY = ObjectAnimator.ofFloat(moveingIV, "translationY", 0, topY - startY);

translateAnimationY.setDuration(800);

translateAnimationY.setInterpolator(new LinearInterpolator());

AnimatorSet animatorSet = new AnimatorSet();//设置动画播放顺序

animatorSet.play(translateAnimationX).with(translateAnimationY);

animatorSet.start();

}

/**

* 抛物线 下降动画

*/

@TargetApi(11)

public void playDownAnimation() {

//抛物线动画,原理:两个位移动画,一个横向匀速移动,一个纵向变速移动,两个动画同时执行,就有了抛物线的效果。

ObjectAnimator translateAnimationX = ObjectAnimator.ofFloat(moveingIV, "translationX", topX - startX, endX - startX);

translateAnimationX.setDuration(800);

translateAnimationX.setInterpolator(new LinearInterpolator());

ObjectAnimator translateAnimationY = ObjectAnimator.ofFloat(moveingIV, "translationY", topY - startY, 0);

translateAnimationY.setDuration(800);

translateAnimationY.setInterpolator(new AccelerateInterpolator());

AnimatorSet animatorSet = new AnimatorSet();//设置动画播放顺序

animatorSet.play(translateAnimationX).with(translateAnimationY);

translateAnimationY.addListener(new Animator.AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

}

@Override

public void onAnimationEnd(Animator animation) {

anim_mask_layout.removeView(moveingIV); //动画结束后移除动画图片

}

@Override

public void onAnimationCancel(Animator animation) {

}

@Override

public void onAnimationRepeat(Animator animation) {

}

});

animatorSet.start();

}

完整DEMO

https://download.csdn.net/download/y280903468/11970396

android 抛物线轨迹,Android用Animation实现完整的抛物线效果相关推荐

  1. android 抛物线轨迹,Android自定义View——贝塞尔曲线实现抛物线效果

    效果展示 原理分析 抛物线效果最主要的难点和原理在于贝塞尔曲线动画的生成,我们通过图片主要讲解贝塞尔曲线动画,这里用到的是二级贝塞尔曲线 1.需要找到贝塞尔曲线的三个点,开启点.结束点.控制点 2.通 ...

  2. android 车辆轨迹,Android自定义view实现车载可调整轨迹线

    本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下 同事做的view,拿过来做个记录. /** * */ package com.text.myv ...

  3. android 画布 轨迹,Android 多点触控,绘制滑动轨迹和十字光标

    这个测试项,要捕捉当前有几个触摸点,当前触摸点坐标,滑动事件在x轴.y轴方向的速度等信息,在触摸时跟随触摸点会出现十字光标,绘制出滑动轨迹. 首先绘制出暗色格子背景,采用了自定义View,较为简单,核 ...

  4. android 画笔轨迹,Android中SurfaceView和view画出触摸轨迹

    一.引言 想实现一个空白的画板,上面可以画出手滑动的轨迹,就这么一个小需求.一般就来讲就两种实现方式,view或者surfaceview.下面看看两种是如何实现的. 二.实现原理 先简单说一下实现原理 ...

  5. java实现抛物线轨迹计算_抛物线、导弹线轨迹计算

    抛物线轨迹计算 不同输入情况下的抛物线有不同计算方式.为了保证飞行时间的一致,水平初速度和起点两个参数是任何情况下都需要的. 三.示例代码 void UParabolicMovementCompone ...

  6. Android鹰眼轨迹追踪

    先看下实现效果: 鹰眼是一套轨迹管理服务,接入该服务后,可追踪车辆/人员等运动物体,实现实时定位.轨迹追踪和轨迹存储查询等功能.基于鹰眼提供的接口和云端服务,可以迅速构建一套完全属于您自己的完整.精准 ...

  7. Android属性动画(Property Animation)

    前言 属性动画系统是一个强大的框架,可以用来为添加几乎各种动画.你可以通过按时间改变对象的属性来定义任何动画,无论这个对象是否被绘制在屏幕内.一个属性动画在特定的时间范围内改变一种属性(也就是一个对象 ...

  8. Hongyang 生命不息,奋斗不止,万事起于忽微,量变引起质变 目录视图 摘要视图 订阅 Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...

  9. Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...

最新文章

  1. [导入][转]常用CSS缩写语法总结
  2. ITK:重视Valued图像的区域最小值
  3. Flurl使用Polly实现重试Policy
  4. 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中
  5. Ubuntu16.04通过GPT挂载硬盘
  6. LAMP平台架构浅析
  7. 楼盘管理系统_教育信息化2.0,2019年校园智慧后勤管理系统五大品牌
  8. 浅析托管与非托管C++代码(转)
  9. poj 3928 树状数组
  10. Spark之键值RDD转换(转载)
  11. linux中级之ansible配置(roles)
  12. 肿瘤免疫浸润资源汇总
  13. Kali dig命令
  14. SAP采购中若干价格表的梳理
  15. 什么是元数据(Metadata)?
  16. 秋天的第一杯奶茶该买哪家?我用爬虫爬取所有数据教你买哪家
  17. 如何用示波器调试波形
  18. 测评三个数据分析工具后,我终于找到了小白都会的数据可视化
  19. Aria2 RPC接口协议和Java的本地调用实现
  20. linux php护卫神,评测:护卫神·主机大师 (Linux版)

热门文章

  1. 距离向量路由算法matlab,距离向量路由算法
  2. 天波、地波、直接三种无线辐射出的电磁波的传播方式
  3. jetbrains Rider使用
  4. Java多线程同步之使用Lock实现车辆入库出库管理
  5. 明道云前后端分离这条路
  6. 龙珠训练营机器学习笔记task03
  7. 招行信用卡笔试编程题 — 考察树的节点个数C++
  8. PDF压缩大小的方法哪个更好用?
  9. 【前端优化】雅虎前端优化的35条军规(存档备用)
  10. MYSQL数据库设计规范与原则