`
mengsina
  • 浏览: 191485 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android滑动之Scroller

阅读更多
转载:移动社区:http://www.cnblogs.com/  
本章内容是 Android.widget.Scroller,版本为Android 2.3 r1,翻译来自"pengyouhong",再次感谢"pengyouhong"!期待你一起参与Android中文API的翻译,联系我 over140@gmail.com。
声明
  欢迎转载,但请保留文章原始出处:)

    移动社区:http://www.cnblogs.com/

    Android中文翻译组:http://code.taobao.org/project/view/404/

正文

  一、结构

    public class Scroller extends Object

    Java.lang.Object

      android.widget.Scroller

  二、概述
    这个类封装了滚动操作。滚动的持续时间可以通过构造函数传递,并且可以指定滚动动作的持续的最长时间。经过这段时间,滚动会自动定位到最终位置,并且通过computeScrollOffset()会得到的返回值为false,表明滚动动作已经结束。


  三、构造函数

  public Scroller (Context context)

  使用缺省的持续持续时间和动画插入器创建一个Scroller。(译者注:interpolator这里翻译为动画插入器,见这里。)

  public Scroller (Context context, Interpolator interpolator)

  根据指定的动画插入器创建一个Scroller,如果指定的动画插入器为空,则会使用缺省的动画插入器(粘滞viscous)创建。


  四、公共方法

  public void abortAnimation ()

  停止动画。与forceFinished(boolean)相反,Scroller滚动到最终x与y位置时中止动画。

  参见

         forceFinished(boolean)


  public boolean computeScrollOffset ()

  当想要知道新的位置时,调用此函数。如果返回true,表示动画还没有结束。位置改变以提供一个新的位置。

  public void extendDuration (int extend)

  延长滚动动画时间。此函数允许当使用setFinalX(int) or setFinalY(int) 时,卷动动作持续更长时间并且卷动更长距离。

          参数

              extend 卷动事件延长的时间,以毫秒为单位

          参见

              setFinalX(int)

              setFinalY(int)

  public void fling (int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)

  在fling(译者注:快滑,用户按下触摸屏、快速移动后松开)手势基础上开始滚动。滚动的距离取决于fling的初速度。

      参数

          startX 滚动起始点X坐标

  startY 滚动起始点Y坐标

  velocityX   当滑动屏幕时X方向初速度,以每秒像素数计算

  velocityY   当滑动屏幕时Y方向初速度,以每秒像素数计算

  minX    X方向的最小值,scroller不会滚过此点。

  maxX    X方向的最大值,scroller不会滚过此点。

  minY    Y方向的最小值,scroller不会滚过此点。

  maxY    Y方向的最大值,scroller不会滚过此点。


  public final void forceFinished (boolean finished)

  强制终止的字段到特定值。(译者注:立即停止滚动?)

      参数

          finished    新的结束值


  public final int getCurrX ()

  返回当前滚动X方向的偏移

      返回值

          距离原点X方向的绝对值


  public final int getCurrY ()

  返回当前滚动Y方向的偏移

      返回值

          距离原点Y方向的绝对值

  public final int getDuration ()

  返回滚动事件的持续时间,以毫秒计算。

      返回值

          滚动持续的毫秒数


  public final int getFinalX ()

  返回滚动结束位置。仅针对“fling”手势有效

      返回值

          最终位置X方向距离原点的绝对距离


  public final int getFinalY ()

  返回滚动结束位置。仅针对“fling”操作有效

      返回值

          最终位置Y方向距离原点的绝对距离

  public final int getStartX ()

  返回滚动起始点的X方向的偏移

      返回值

          起始点在X方向距离原点的绝对距离


  public final int getStartY ()

  返回滚动起始点的Y方向的偏移

      返回值

          起始点在Y方向距离原点的绝对距离

  public final boolean isFinished ()

  返回scroller是否已完成滚动。

      返回值

          停止滚动返回true,否则返回false


  public void setFinalX (int newX)

  设置scroller的X方向终止位置

      参数

          newX    新位置在X方向距离原点的绝对偏移。

      参见

          extendDuration(int)

         setFinalY(int)


  public void setFinalY (int newY)

  设置scroller的Y方向终止位置

      参数

          newY    新位置在Y方向距离原点的绝对偏移。

      参见

          extendDuration(int)

          setFinalY(int)

  public void startScroll (int startX, int startY, int dx, int dy)

  以提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。

      参数

          startX 水平方向滚动的偏移值,以像素为单位。负值表明滚动将向左滚动

  startY 垂直方向滚动的偏移值,以像素为单位。负值表明滚动将向上滚动

  dx 水平方向滑动的距离,负值会使滚动向左滚动

  dy 垂直方向滑动的距离,负值会使滚动向上滚动


  public void startScroll (int startX, int startY, int dx, int dy, int duration)

  以提供的起始点和将要滑动的距离开始滚动。

      参数

          startX 水平方向滚动的偏移值,以像素为单位。负值表明滚动将向左滚动

  startY 垂直方向滚动的偏移值,以像素为单位。负值表明滚动将向上滚动

  dx 水平方向滑动的距离,负值会使滚动向左滚动

  dy 垂直方向滑动的距离,负值会使滚动向上滚动

        duration    滚动持续时间,以毫秒计。


  public int timePassed ()

  返回自滚动开始经过的时间

      返回值
            经过时间以毫秒为单位


  五、补充

    文章精选

      Scroller 粗浅理解

      ScrollTextView - scrolling TextView for Android

    示例代码

       创建工程MyScroler,或者将下类名“MyScroler”改为自己创建的工程,将下面代码直接覆盖生成的.java文件运行即可:
package my.Scroller;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Scroller;

public class MyScroler extends Activity {
    /** Called when the activity is first created. */
    LinearLayout lay1,lay2,lay;
     private Scroller mScroller;
     private boolean s1,s2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mScroller = new Scroller(this);
         lay1 = new LinearLayout(this){
             @Override
             public void computeScroll() {
                 if (mScroller.computeScrollOffset()) {
                     scrollTo(mScroller.getCurrX(), 0);
                     postInvalidate();
                 }
             }
         };
         lay2 = new LinearLayout(this){
             @Override
             public void computeScroll() {
                 if (mScroller.computeScrollOffset()) {
                    // mScrollX = mScroller.getCurrX();
                     scrollTo(mScroller.getCurrX(), 0);
                     postInvalidate();
                 }
             }
         };
      lay1.setBackgroundColor(this.getResources().getColor(android.R.color.darker_gray));
        lay2.setBackgroundColor(this.getResources().getColor(android.R.color.white));
        lay = new LinearLayout(this);
        lay.setOrientation(LinearLayout.VERTICAL);
        LinearLayout.LayoutParams p0 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);    
        this.setContentView(lay, p0);
       
        LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);    
        p1.weight=1;
        lay.addView(lay1,p1);
        LinearLayout.LayoutParams p2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);    
        p2.weight=1;
        lay.addView(lay2,p2);
        Button tx = new Button(this);
        Button tx2 = new Button(this);
        tx.setText("Button1"); 
        tx2.setText("Button2");
        tx.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                if(!s1){
                    mScroller.startScroll(0, 0, 5, 10, 10);
                    s1 = true;
                }else{
                    mScroller.startScroll(0, 0, -50, -10,10);
                    s1 = false;
                }
            }
           
        });
        tx2.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                if(!s2){
                    mScroller.startScroll(0, 0, 5, 20,10);
                    s2=true;
                }else{
                    mScroller.startScroll(20, 20, -50, -20,10);
                    s2=false;
                }
            }
        });
        lay1.addView(tx);
        lay2.addView(tx2);
    }
}
分享到:
评论

相关推荐

    Android之Scroller(滑动)完全解析

    `Scroller.startScroll()`用于执行线性滚动,而`Scroller.fling()`则用于执行抛掷(fling)动作,即快速滑动后产生的惯性滚动。`fling()`需要设置初始速度,系统会根据速度和摩擦系数自动计算滚动距离和时间。 ### ...

    Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果 源码程序

    Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果,项目详情http://blog.csdn.net/xiaanming/article/details/17539199

    Android滑动冲突解决的例子

    Android提供了GestureDetector和Scroller类来帮助处理滑动事件。GestureDetector可以检测出用户的各种手势,包括滑动。你可以创建一个GestureDetector实例,然后重写它的onDown()、onFling()等方法,以此来区分不同...

    android scroller学习demo

    在Android开发中,`Scroller`是一个非常重要的组件,它主要用于实现平滑的滚动效果,尤其是在处理触摸事件和动画时。本示例“android scroller学习demo”将带你深入理解如何利用`Scroller`实现类似QQ ListView的侧滑...

    Android 使用Scroller自动滚动第二种实现

    在Android开发中,Scroller是一个非常重要的工具类,它主要用于实现平滑的动画效果,比如ScrollView、ViewPager等组件的滑动。本篇文章将探讨如何利用Scroller实现Android界面的自动滚动,这是一种不同于常见动画库...

    Android Scroller完全解析

    在Android开发中,我们经常需要实现一些平滑的滚动效果,比如ScrollView、ViewPager的滑动,这些都离不开一个关键的类——`Scroller`。`Scroller`是Android SDK提供的一种动画机制,它不直接处理UI更新,而是计算出...

    android scroller滑动效果简单demo

    在Android开发中,`Scroller`是一个非常重要的组件,它提供了平滑的滚动动画效果,广泛应用于各种滑动界面,如ScrollView、ViewPager等。本文将深入解析`Scroller`的工作原理,并通过一个简单的Demo来展示如何在实际...

    Android 滑动效果 自定义控件

    此外,如果需要更流畅的滑动效果,可以考虑使用Scroller或VelocityTracker类。 总的来说,自定义ViewGroup并实现滑动效果涉及对Android UI框架的深入理解和巧妙利用。通过精确控制测量、布局、触摸事件处理和动画,...

    Android Scroller实现View弹性滑动Demo

    在Android开发中,`Scroller`是一个非常重要的工具类,它并不直接控制View的滚动,而是提供了一套平滑滚动的计算逻辑。`Scroller`主要用于处理View的弹性滑动效果,比如在ScrollView、ViewPager或者自定义View中实现...

    android 滑动删除demo可以直接运行

    Android SDK中并没有内置的滑动监听器,但我们可以使用`GestureDetector`或`Scroller`配合`onTouchEvent`方法来检测用户的滑动手势。当用户滑动时,监听器会更新视图状态,并根据滑动距离决定是否触发删除操作。 4....

    android 滑动关闭activity.zip

    - 使用`GestureDetector`或`Scroller`类来辅助识别滑动行为和动画效果。 - 通过设置合适的触摸事件监听器,如`OnSwipeListener`,可以监听滑动开始、滑动过程和滑动结束等事件,实现平滑的滑动动画。 5. **集成到...

    scroller类实战案例类似ViewPager滑动功能

    Scroller类是Android系统中一个非常重要的工具类,主要用于实现平滑滚动效果,尤其是在处理View的滑动动画时。在Android开发中,我们经常会遇到需要模拟ViewPager滑动效果的情况,而Scroller类就在此时发挥着关键...

    Android 滑动提示、菜单及列表等小程序源码

    在Android开发中,滑动提示、菜单以及列表是构建用户界面不可或缺的部分,这些元素极大地提升了应用的交互性和用户体验。下面将详细阐述这三个方面的知识点,并结合源码分析来深入理解其工作原理。 1. **滑动提示...

    惯性滑动切换(Fling操作)源码

    惯性滑动切换,也称为Fling操作,是Android用户界面设计中常见的一种手势交互方式。它主要用于ListView、ViewPager、ScrollView等控件,允许用户快速滑动内容并以平滑的惯性效果滚动到目标位置。Fling操作的实现原理...

    android开发通过Scroller实现过渡滑动效果操作示例

    本文实例讲述了android开发通过Scroller实现过渡滑动效果。分享给大家供大家参考,具体如下: 主要介绍一下Scroller这个类,它可以实现过渡滑动的效果,使滑动看起来不是那么生硬,当然它用大量的重绘来实现,...

    android 图片滑动浏览

    Android系统提供了`GestureDetector`和`Scroller`类来帮助我们处理滑动手势。`GestureDetector`可以监听用户的滑动、点击等手势,而`Scroller`则帮助我们实现平滑的滚动动画。在`ViewPager`的子类或适配器中,我们...

    Android自定义View弹性滑动Scroller详解

    Android 自定义 View 弹性滑动 Scroller 详解 Android 自定义 View 弹性滑动 Scroller 是 Android 开发中的一种常见技术,用于实现 View 的滑动效果。Scroller 是一个滑动帮助类,通过配合 scrollTo/ScrollBy 方法...

    android velocityTracker滑动速度检测器简单使用

    在Android开发中,VelocityTracker是用于检测用户触摸屏幕滑动手势速度的重要工具。它可以帮助我们了解手指在屏幕上移动的速度和方向,这对于实现如滚动、滑动解锁等手势操作的交互非常有用。本教程将深入讲解如何在...

    自己实现android滑动效果

    本教程将探讨如何自己实现Android滑动效果,类似SlidingMenu的效果。SlidingMenu是一个流行的开源库,用于在Android应用中添加侧滑菜单,但在这里我们将不依赖任何外部库,而是从头构建这一功能。 首先,我们需要...

    Android 滑动效果 Gallery

    1. **手势检测**:通过GestureDetector或Scroller类可以自定义滑动行为,例如添加平滑滚动或惯性滑动效果。 2. **动画**:使用ObjectAnimator或ValueAnimator可以为滑动添加平滑过渡动画,提升用户体验。 3. **触摸...

Global site tag (gtag.js) - Google Analytics