Android 实现ListView 3D效果 - 2 - 弹性滚动,Fling
2013-04-09 21:23
1091 查看
本文是在以下四篇基础上添加的弹性滚动和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动态滚动效果。
上面出现一个陌生的公式,这个公式涉及到“欧拉积分”:
mPosition += mVelocity * dt / 1000;
通过欧拉积分由速度计算位置,其实这个公式精确度并不是很高,但是针对于手机上用为UI的移动控制精度已经足够了。
新位置 = 旧位置 + 速度 * 间隔时间
其中除以1000是为了同比缩放。
针对“欧拉积分”在计算机领域的使用细节可以查看:
《Flash ActionScript 3.0 动画高级教程》 第六章 数值积分
如果不想查看此书,网上也有把这一章的内容贴出来的:
高级物理:数值积分(欧拉积分)
http://randomclan.blog.163.com/blog/static/145300982012121101715171/
以下是在ListView 3D边界向下拉动,然后送开手,ListView 3D随抬起手指向上滚动,之后在向下滚动。以下是position位置的截取其中一部分:
其变化规律是先由正值 - > 0 > 负值。
三、在不移动是触发以上效果
每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 自己动手写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 = 284 position = 196 position = 118 position = 76 position = 37 position = 1.0 position = -33 position = -62 position = -87 position = -108 position = -123 position = -141 position = -159 position = -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实现3D滚动效果
- Android 实现ListView 3D效果 - 1
- 【Android】用RecycleView实现可以横向滚动的ListView效果
- Android 实现ListView不可滚动效果
- Android 实现ListView不可滚动效果
- Android中实现ListView的弹性效果
- Android基于ListView实现类似QQ空间的滚动翻页与滚动加载效果
- Android 弹性ListView和ScrollView 简单优雅地实现回弹效果
- Android:如何实现例如iOS的listview 的弹性效果
- Android ListView 弹性滚动简单实现
- Android ListView弹性效果的实现方法
- Android 实现ListView不可滚动效果
- Android textview和listview实现水平自动滚动的走马灯效果
- Android PinnedSectionListView实现滚动标题置顶/联系人列表效果
- Android 实现ListView的弹性效果
- 新手自定义控件,创建属于自己的下拉刷新(一)---Android,ListView实现IOS的弹性效果
- Android 实现ListView的弹性效果
- Android UI控件之ListView实现圆角效果
- [Parallax Animation]实现知乎 Android 客户端启动页视差滚动效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果