也许你想在Android上实现这种反弹的动画效果。Android Support Library 25.3.0引入了Dynamic-animation增强动画,里面提供了几个类用于使动画呈现实现真实的物理效果。
你会想,自己的动画里加上 BounceInterpolator或OvershootInterpolator 插值器也能达到这种效果,然而实际上达不到。当然你也可以自己写插值器,如果你不嫌麻烦的话。
SpringAnimation弹性动画实现方法
gradle引入,最低支持API16
dependencies {
compile 'com.android.support:support-dynamic-animation:25.3.0'
}
定义SpringForce,定义弹性特质
SpringForce spring = new SpringForce(finalPosition); spring.setStiffness(stiffness); spring.setDampingRatio(dampingRatio);
定义SpringAnimation,并关联SpringForce对象
SpringAnimation animation = new SpringAnimation(view, property); animation.setSpring(spring);
代码如下
PositionActivity.java
public class PositionActivity extends AppCompatActivity {
float STIFFNESS = SpringForce.STIFFNESS_MEDIUM;//硬度
float DAMPING_RATIO = SpringForce.DAMPING_RATIO_HIGH_BOUNCY;//阻尼
SpringAnimation xAnimation;//x方向
SpringAnimation yAnimation;//y方向
View movingView;//图片
float dX = 0f;
float dY = 0f;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_position);
movingView = findViewById(R.id.movingView);
// 以图片的初始位置创建动画对象
movingView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
xAnimation = createSpringAnimation(
movingView, SpringAnimation.X, movingView.getX(), STIFFNESS, DAMPING_RATIO);
yAnimation = createSpringAnimation(
movingView, SpringAnimation.Y, movingView.getY(), STIFFNESS, DAMPING_RATIO);
//初始位置确定,移除监听
movingView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
movingView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
// 计算到左上角的距离
dX = view.getX() - event.getRawX();
dY = view.getY() - event.getRawY();
// 取消动画以便按住图片
xAnimation.cancel();
yAnimation.cancel();
break;
case MotionEvent.ACTION_MOVE:
// 另一种改变View的LayoutParams(位置)的方式
movingView.animate()
.x(event.getRawX() + dX)
.y(event.getRawY() + dY)
.setDuration(0)
.start();
break;
case MotionEvent.ACTION_UP:
xAnimation.start();
yAnimation.start();
break;
}
return true;
}
});
}
/**
* 创建弹性动画
* @param view 动画关联的控件
* @param property 动画作用的属性
* @param finalPosition 动画结束的位置
* @param stiffness 硬度
* @param dampingRatio 阻尼
* @return
*/
SpringAnimation createSpringAnimation(View view,
DynamicAnimation.ViewProperty property,
Float finalPosition,
@FloatRange(from = 0.0) Float stiffness,
@FloatRange(from = 0.0) Float dampingRatio) {
//创建弹性动画类SpringAnimation
SpringAnimation animation = new SpringAnimation(view, property);
//SpringForce类,定义弹性特质
SpringForce spring = new SpringForce(finalPosition);
spring.setStiffness(stiffness);
spring.setDampingRatio(dampingRatio);
//关联弹性特质
animation.setSpring(spring);
return animation;
}
}
activity_position.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".PositionActivity"> <ImageView android:id="@+id/movingView" android:layout_width="128dp" android:layout_height="128dp" android:layout_gravity="center" android:src="@drawable/android" android:tint="@color/colorPrimary" tools:ignore="ContentDescription"/> </FrameLayout>
触摸改变图片的位置,松开手启动动画。
翻译自https://www.thedroidsonroids.com/blog/android/springanimation-examples/,原作者使用Kotlin语言实现的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# SpringAnimation
# 弹性动画
# SpringAnimation 实现菜单从顶部弹出从底部消失动画效果
# 自己的
# 插值
# 几个
# 如果你
# 你会
# 也能
# 你想
# 你也可以
# 达不到
# 大家多多
# 移除
# 不嫌
# 引入了
# public
# PositionActivity
# setSpring
# AppCompatActivity
# float
# STIFFNESS
# extends
相关文章:
寿县云建站:智能SEO优化与多行业模板快速上线指南
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
网站app免费制作软件,能免费看各大网站视频的手机app?
Thinkphp 中 distinct 的用法解析
Bpmn 2.0的XML文件怎么画流程图
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
香港服务器租用费用高吗?如何避免常见误区?
网页设计网站制作软件,microsoft office哪个可以创建网页?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
建站之星2.7模板快速切换与批量管理功能操作指南
如何基于PHP生成高效IDC网络公司建站源码?
潮流网站制作头像软件下载,适合母子的网名有哪些?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何彻底删除建站之星生成的Banner?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何快速搭建个人网站并优化SEO?
如何通过FTP空间快速搭建安全高效网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
南京网站制作费用,南京远驱官方网站?
建站之星下载版如何获取与安装?
如何快速搭建高效简练网站?
如何在IIS中新建站点并解决端口绑定冲突?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
长沙企业网站制作哪家好,长沙水业集团官方网站?
怎么将XML数据可视化 D3.js加载XML
表情包在线制作网站免费,表情包怎么弄?
如何在阿里云虚拟服务器快速搭建网站?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站之星安全性能如何?防护体系能否抵御黑客入侵?
建站之星北京办公室:智能建站系统与小程序生成方案解析
,想在网上投简历,哪几个网站比较好?
如何在万网ECS上快速搭建专属网站?
建站之星备案流程有哪些注意事项?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
已有域名和空间如何快速搭建网站?
如何快速上传自定义模板至建站之星?
如何制作网站标识牌,动态网站如何制作(教程)?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在腾讯云服务器上快速搭建个人网站?
如何零基础开发自助建站系统?完整教程解析
*请认真填写需求信息,我们会在24小时内与您取得联系。