Android(安卓)实现ListView 3D效果 - 2 - 弹性滚动,Fling
16lz
2021-12-04
本文是在以下四篇基础上添加的弹性滚动和fling效果
《Android 自己动手写ListView学习其原理 1 显示第一屏Item》
《Android 自己动手写ListView学习其原理 2 上下滚动》
《Android 自己动手写ListView学习其原理 3 ItemClick,ItemLongClick,View复用》《Android 实现ListView 3D效果 - 1》
一、有图有真相
二、动态效果
添加动态效果可以使列表看起来更人性化,如回滚摆动,Fling效果。如果只是自动滚动和Fling效果可以使用Android 提供的辅助类Scroller。回滚可以使用ListView 在Andorid 9版本以后支持的OverScroll达到预期效果,不过本实例的效果更酷。
首先定义一个动态效果工具类 Dynamics
主要包含两个变量position位置和velocity速率。Dynamics是一个抽象类可以很方便基于其实现不同的ListView动态滚动效果。
class SimpleDynamics extends Dynamics { private float mFrictionFactor; public SimpleDynamics(final float frictionFactor) { mFrictionFactor = frictionFactor; } @Override protected void onUpdate(final int dt) { mPosition += mVelocity * dt / 1000; mVelocity *= mFrictionFactor; }}
上面出现一个陌生的公式,这个公式涉及到“欧拉积分”: mPosition += mVelocity * dt / 1000;
通过欧拉积分由速度计算位置,其实这个公式精确度并不是很高,但是针对于手机上用为UI的移动控制精度已经足够了。 新位置 = 旧位置 + 速度 * 间隔时间 其中除以1000是为了同比缩放。
针对“欧拉积分”在计算机领域的使用细节可以查看: 《Flash ActionScript 3.0 动画高级教程》 第六章 数值积分 如果不想查看此书,网上也有把这一章的内容贴出来的: 高级物理:数值积分(欧拉积分) http://randomclan.blog.163.com/blog/static/145300982012121101715171/
以下是在ListView 3D边界向下拉动,然后送开手,ListView 3D随抬起手指向上滚动,之后在向下滚动。以下是 position位置的截取其中一部分:
position = 284position = 196position = 118position = 76position = 37position = 1.0position = -33position = -62position = -87position = -108position = -123position = -141position = -159position = -178
其变化规律是先由正值 - > 0 > 负值。
三、在不移动是触发以上效果
if (mDynamicsRunnable == null) { mDynamicsRunnable = new Runnable() { public void run() { if (mDynamics == null) { return; } mListTopStart = getChildTop(getChildAt(0)) - mListTopOffset; mDynamics.update(AnimationUtils.currentAnimationTimeMillis()); scrollList((int)mDynamics.getPosition() - mListTopStart); if (!mDynamics.isAtRest(VELOCITY_TOLERANCE, POSITION_TOLERANCE)) { postDelayed(this, 16); } } }; }
每16秒向消息队列中添加Runnable。
Flinging、滚动限制等直接看代码吧
四、源码下载
点击下载源码
参考资料: Making your own 3D list – Part 3 (final part)
2013-04-16 添加于之前文章关联
转载请注明出处: http://blog.csdn.net/love_world_/article/details/8779683
更多相关文章
- Android实现书籍翻页效果--扩展版
- Android实现振动效果
- android刮刮奖效果
- Android学习之 UI效果
- Android(安卓)滚动条属性
- Listview
- 【Android(安卓)界面效果47】RecyclerView详解
- android抽屉效果
- android UI进阶之弹窗的使用(2)--实现通讯录的弹窗效果