参考:
Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
http://blog.csdn.net/qinjuning/article/details/7419207
Scroller与scrollby/scrollto的区别
Scroller的构造方法是new Scroller(context ); 他是 在执行startScroll(int x,int y,int dx,int dy,int dt);请求当前context下的view 执行自己的computeScroll()方法 【注:这个方法默认是空方法,需要自己覆写】从而实现移动
public void computeScroll() { // TODO Auto-generated method stub Log.e(TAG, "computeScroll"); // 如果返回true,表示动画还没有结束 // 因为前面startScroll,所以只有在startScroll完成时 才会为false if (mScroller.computeScrollOffset()) { Log.e(TAG, mScroller.getCurrX() + "======" + mScroller.getCurrY()); // 产生了动画效果,根据当前值 每次滚动一点 scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); Log.e(TAG, "### getleft is " + getLeft() + " ### getRight is " + getRight()); //此时同样也需要刷新View ,否则效果可能有误差 postInvalidate(); } else Log.i(TAG, "have done the scoller -----"); }
public class Scroller { private int mStartX; //起始坐标点 , X轴方向 private int mStartY; //起始坐标点 , Y轴方向 private int mCurrX; //当前坐标点 X轴, 即调用startScroll函数后,经过一定时间所达到的值 private int mCurrY; //当前坐标点 Y轴, 即调用startScroll函数后,经过一定时间所达到的值 private float mDeltaX; //应该继续滑动的距离, X轴方向 private float mDeltaY; //应该继续滑动的距离, Y轴方向 private boolean mFinished; //是否已经完成本次滑动操作, 如果完成则为 true //构造函数 public Scroller(Context context) { this(context, null); } public final boolean isFinished() { return mFinished; } //强制结束本次滑屏操作 public final void forceFinished(boolean finished) { mFinished = finished; } public final int getCurrX() { return mCurrX; } /* Call this when you want to know the new location. If it returns true, * the animation is not yet finished. loc will be altered to provide the * new location. */ //根据当前已经消逝的时间计算当前的坐标点,保存在mCurrX和mCurrY值中 public boolean computeScrollOffset() { if (mFinished) { //已经完成了本次动画控制,直接返回为false return false; } int timePassed = (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime); if (timePassed < mDuration) { switch (mMode) { case SCROLL_MODE: float x = (float)timePassed * mDurationReciprocal; ... mCurrX = mStartX + Math.round(x * mDeltaX); mCurrY = mStartY + Math.round(x * mDeltaY); break; ... } else { mCurrX = mFinalX; mCurrY = mFinalY; mFinished = true; } return true; } //开始一个动画控制,由(startX , startY)在duration时间内前进(dx,dy)个单位,即到达坐标为(startX+dx , startY+dy)出 public void startScroll(int startX, int startY, int dx, int dy, int duration) { mFinished = false; mDuration = duration; mStartTime = AnimationUtils.currentAnimationTimeMillis(); mStartX = startX; mStartY = startY; mFinalX = startX + dx; mFinalY = startY + dy; mDeltaX = dx; mDeltaY = dy; ... } }
而scrollby 与scrollto 是直接 移动
今天看到六哥做的滑动的 发现 一个很少用到但是挺好玩的东西Scroller
简单的描述下
对一个view 覆写他的方法
@Override public void computeScroll() { // super.computeScroll(); if (mScroller.computeScrollOffset()) { scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); postInvalidate(); } }
那么 当它自己或者子view触发到
mScroller.startScroll(0, 0, 0, 0, duration);//全是int 初始x 初始y 位移x 位移y 持续时间
就会调用computeScroll()方法。
【关于startScroll 调用startScroll 并不是一次,是把位移时间切割成很小的时间 然后每次调用computeScroll】
而之所以能达到位移的效果 实际上移动的是 把覆写computeScroll的view移动,从而看起 内部的子view也看起来移动了。
scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); //这句代码就是移动this这个view 到mScroller.getCurrX(), mScroller.getCurrY() //mScroller.getCurrX(), mScroller.getCurrY() 随着持续时间duration 持续改变 直到结束
api:http://developer.android.com/reference/android/widget/Scroller.html
中文api:http://www.cnblogs.com/over140/archive/2010/12/16/1907528.html
4楼:http://www.eoeandroid.com/thread-43927-1-1.html
另外 6哥写的一个左右滑动ralativelayout ~
相关推荐
在Android开发中,`Scroller`是一个非常重要的组件,它主要用于实现平滑的滚动效果,尤其是在处理触摸事件和动画时。本示例“android scroller学习demo”将带你深入理解如何利用`Scroller`实现类似QQ ListView的侧滑...
在Android开发中,我们经常需要实现一些平滑的滚动效果,比如ScrollView、ViewPager的滑动,这些都离不开一个关键的类——`Scroller`。`Scroller`是Android SDK提供的一种动画机制,它不直接处理UI更新,而是计算出...
在Android开发中,`Scroller`是一个非常重要的工具类,主要用于实现平滑的滚动效果。它并不直接控制View的移动,而是提供一个离散的、可定制的动画过程,通过计算出一系列连续的位置变化,然后由ViewGroup或者View...
在Android开发中,`Scroller`是一个非常重要的组件,它主要用于处理平滑的滚动效果,尤其是在没有用户交互的情况下。在本篇文章中,我们将深入探讨`Scroller`的工作原理,以及如何在实际应用中使用它来实现平滑滚动...
Android Scroller是Android系统中用于实现平滑滚动效果的重要组件,它主要用于控制View或者 ViewGroup的动画滚动效果,比如ScrollView、HorizontalScrollView等滚动视图的流畅滚动。Scroller并不直接处理屏幕上的...
4. 可以添加一些额外的逻辑,比如限制滑动范围,防止超出页面边界,或者实现弹性滑动效果,当滑动速度过快时,`Scroller`会自动计算一个回弹效果。 5. 最后,设置适配器,填充`ViewPageDemo`的内容,可以是多个`...
在Android开发中,Scroller是一个非常重要的工具类,它主要用于实现平滑的动画效果,比如ScrollView、ViewPager等组件的滑动。本篇文章将探讨如何利用Scroller实现Android界面的自动滚动,这是一种不同于常见动画库...
在Android开发中,`Scroller`是一个非常重要的工具类,它并不直接控制View的滚动,而是提供了一套平滑滚动的计算逻辑。`Scroller`主要用于处理View的弹性滑动效果,比如在ScrollView、ViewPager或者自定义View中实现...
在Android开发中,`Scroller`是一个非常重要的组件,它主要用于处理平滑的滚动效果,尤其是在没有用户交互时,如动画或自动滚动。本篇文章将深入剖析`Scroller`的工作原理,以及它如何与子视图(child views)配合...
为了增强用户体验,`Scroller`还提供了一些额外的功能,如`fling()`方法用于实现惯性滑动。这个方法允许用户快速滑动后,View会继续滑动一段时间并逐渐减速,模拟真实物理世界的滑动效果。`fling()`的参数包括起始...
Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果,项目详情http://blog.csdn.net/xiaanming/article/details/17539199
在Android开发中,`Scroller`和`computeScroll`是两个关键的概念,它们与ViewGroup的滚动动画密切相关。本文将详细解析这两个概念及其调用机制之间的关系。 首先,`Scroller`是一个内部类,它并不直接参与ViewGroup...
Android事件拦截机制 Android中事件的传递和拦截和View树结构是相关联的,在View树中,分为叶子节点和普通节点,普通节点有子节点只能是ViewGroup,叶子节点可以是View或者ViewGroup。Android和事件分发拦截相关的...
`Scroller`类是Android系统提供的一种用于处理平滑滚动和动画的关键工具,尤其在没有触摸事件或者手势操作时,它可以帮助我们实现各种复杂的滚动和动画效果。本篇文章将深入探讨如何利用`Scroller`来实现一个简单的...
Scroller在Android中是一个核心组件,它主要用于实现View的平滑滚动效果,使得视图能够按照预设的时间和轨迹进行连续、平滑的移动,而不是简单地瞬移。Scroller本身并不直接改变View的位置,而是提供计算滚动过程的...
`scrollTo`、`scrollBy`和`Scroller`是Android视图组件中处理滚动的核心方法,它们各自扮演着不同的角色,共同实现了平滑且可控的滚动效果。下面我们将深入探讨这三个概念及其在实际开发中的应用。 1. `scrollTo`...
本篇将深入探讨如何在Android中仿制ViewPager,通过自定义Scroller来模拟动画,从而达到更灵活的页面滑动体验。 首先,我们要理解Scroller在Android中的作用。Scroller并非一个View或者ViewGroup,而是一个辅助类,...