本文来自http://blog.csdn.net/w324821962,引用麻烦注明出处
为了让大家有个概念,这里引用了一下网络上的一个全景照片,相信大家对于这样的拍照技巧还是有了解过的,别说你没用过全景。
现在先说明一下几个对象:
- 镜头
- 场景
- 内容
那么转换后,这个图该这么看
所谓镜头就是我们的手机屏幕大小,无论是3.7寸,4.3寸等等。
所谓场景就是我们所有内容的有序排列,无论是横向(ViewPage),还是纵向(ListView)等等。
所谓内容就是显示在镜头内的事物。
按照相对论,虽然实际上我们是移动镜头去捕捉内容从而达到场景的实现。反过来,就是镜头静止,我们移动场景来展现内容。
在android中对于滑动提供了一个Scroll类
如果你使用 Scroller ,流程如下:
1.可以在自定义的布局中,按照需求初始化 Scroller 构造函数。
2.重写onInterceptTouchEvent(MotionEvent ev)方法,看看是否要拦截相关的点击时间。
3.重写onTouchEvent(MotionEvent event)方法,根据触摸屏上的动作使用 computeScroll()以及 scrollTo 和 scrollBy 方法 进行根据手指对布局进行滑动效果。
4.在触摸操作结束(MotionEvent.ACTION_UP)的时候,调用startScroll(int startX, int startY, int dx, int dy, int duration)方法,进行动画自动操作,来完成整个滚动流程。
针对于Scroll的运用如下如所示
而对于ScrollTo和ScrollBy的区别在于你对To和By的理解,ScrollTo 是 到那个位置,ScrollBy 是经过这段位置。
在Android对于手势通过了一个VelocityTracker类。Android.View.VelocityTracker主要用于跟踪触屏事件(flinging和其他gestures事件)的速率。
大体的使用是这样的:
当你需要跟踪触摸屏事件的速度的时候,使用obtain()方法来获得VelocityTracker类的一个实例对象
在onTouchEvent回调函数中,使用addMovement(MotionEvent)函数将当前的移动事件传递给VelocityTracker对象
使用computeCurrentVelocity (int units)函数来计算当前的速度,使用 getXVelocity ()、 getYVelocity ()函数来获得当前的速度
private VelocityTracker mVelocityTracker;
//在onTouchEvent(MotionEvent event)中
if(mVelocityTracker == null){
mVelocityTracker = new VelocityTracker .obtain();//获得VelocityTracker类实例
}
mVelocityTracker .addMotionEvent(event);//将事件加入到VelocityTracker类实例中
//判断当ev事件是MotionEvent.ACTION_UP时:计算速率
final VelocityTracker velocityTracker = mVelocityTracker;
velocityTracker.computerCurrentVelocity(1,(float)0.01);
velocityTracker.computeCurrentVelocity(1000); //设置units的值为1000,意思为一秒时间内运动了多少个像素
通过这几天的学习,目前对于滑动的理解暂时只有这么多,如果这篇文章对大家有一点帮助,说明我的学习还是有点成果的。
版权声明:本文为博主原创文章,未经博主允许不得转载。