android 抛物线轨迹,Android用Animation实现完整的抛物线效果
最近需求要做一个小球上升再下降的抛物线运动,类似太阳东升西落的动画。
在网上找了好久,好多的抛物线都是平抛,用于购物车添加效果。
于是自己动手,做了一个完整的向上抛物线的动画。
首先要区分两个概念,一个是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实现完整的抛物线效果相关推荐
- android 抛物线轨迹,Android自定义View——贝塞尔曲线实现抛物线效果
效果展示 原理分析 抛物线效果最主要的难点和原理在于贝塞尔曲线动画的生成,我们通过图片主要讲解贝塞尔曲线动画,这里用到的是二级贝塞尔曲线 1.需要找到贝塞尔曲线的三个点,开启点.结束点.控制点 2.通 ...
- android 车辆轨迹,Android自定义view实现车载可调整轨迹线
本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下 同事做的view,拿过来做个记录. /** * */ package com.text.myv ...
- android 画布 轨迹,Android 多点触控,绘制滑动轨迹和十字光标
这个测试项,要捕捉当前有几个触摸点,当前触摸点坐标,滑动事件在x轴.y轴方向的速度等信息,在触摸时跟随触摸点会出现十字光标,绘制出滑动轨迹. 首先绘制出暗色格子背景,采用了自定义View,较为简单,核 ...
- android 画笔轨迹,Android中SurfaceView和view画出触摸轨迹
一.引言 想实现一个空白的画板,上面可以画出手滑动的轨迹,就这么一个小需求.一般就来讲就两种实现方式,view或者surfaceview.下面看看两种是如何实现的. 二.实现原理 先简单说一下实现原理 ...
- java实现抛物线轨迹计算_抛物线、导弹线轨迹计算
抛物线轨迹计算 不同输入情况下的抛物线有不同计算方式.为了保证飞行时间的一致,水平初速度和起点两个参数是任何情况下都需要的. 三.示例代码 void UParabolicMovementCompone ...
- Android鹰眼轨迹追踪
先看下实现效果: 鹰眼是一套轨迹管理服务,接入该服务后,可追踪车辆/人员等运动物体,实现实时定位.轨迹追踪和轨迹存储查询等功能.基于鹰眼提供的接口和云端服务,可以迅速构建一套完全属于您自己的完整.精准 ...
- Android属性动画(Property Animation)
前言 属性动画系统是一个强大的框架,可以用来为添加几乎各种动画.你可以通过按时间改变对象的属性来定义任何动画,无论这个对象是否被绘制在屏幕内.一个属性动画在特定的时间范围内改变一种属性(也就是一个对象 ...
- Hongyang 生命不息,奋斗不止,万事起于忽微,量变引起质变 目录视图 摘要视图 订阅 Android 属性动画(Property Animation) 完全解析 (上)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...
- Android 属性动画(Property Animation) 完全解析 (上)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...
最新文章
- [导入][转]常用CSS缩写语法总结
- ITK:重视Valued图像的区域最小值
- Flurl使用Polly实现重试Policy
- 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中
- Ubuntu16.04通过GPT挂载硬盘
- LAMP平台架构浅析
- 楼盘管理系统_教育信息化2.0,2019年校园智慧后勤管理系统五大品牌
- 浅析托管与非托管C++代码(转)
- poj 3928 树状数组
- Spark之键值RDD转换(转载)
- linux中级之ansible配置(roles)
- 肿瘤免疫浸润资源汇总
- Kali dig命令
- SAP采购中若干价格表的梳理
- 什么是元数据(Metadata)?
- 秋天的第一杯奶茶该买哪家?我用爬虫爬取所有数据教你买哪家
- 如何用示波器调试波形
- 测评三个数据分析工具后,我终于找到了小白都会的数据可视化
- Aria2 RPC接口协议和Java的本地调用实现
- linux php护卫神,评测:护卫神·主机大师 (Linux版)