zoukankan      html  css  js  c++  java
  • Android Scroller简单用法

    Android里Scroller类是为了实现View平滑滚动的一个Helper类。通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(context)。设置mScroller滚动的位置时,并不会导致View的滚动,通常是用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动。

          相关API介绍如下
    Java代码  收藏代码
    1. mScroller.getCurrX() //获取mScroller当前水平滚动的位置  
    2. mScroller.getCurrY() //获取mScroller当前竖直滚动的位置  
    3. mScroller.getFinalX() //获取mScroller最终停止的水平位置  
    4. mScroller.getFinalY() //获取mScroller最终停止的竖直位置  
    5. mScroller.setFinalX(int newX) //设置mScroller最终停留的水平位置,没有动画效果,直接跳到目标位置  
    6. mScroller.setFinalY(int newY) //设置mScroller最终停留的竖直位置,没有动画效果,直接跳到目标位置  
    7.   
    8. //滚动,startX, startY为开始滚动的位置,dx,dy为滚动的偏移量, duration为完成滚动的时间  
    9. mScroller.startScroll(int startX, int startY, int dx, int dy) //使用默认完成时间250ms  
    10. mScroller.startScroll(int startX, int startY, int dx, int dy, int duration)  
    11.   
    12. mScroller.computeScrollOffset() //返回值为boolean,true说明滚动尚未完成,false说明滚动已经完成。这是一个很重要的方法,通常放在View.computeScroll()中,用来判断是否滚动是否结束。  

          举例说明,自定义一个CustomView,使用Scroller实现滚动:

    Java代码  收藏代码
    1. import android.content.Context;  
    2. import android.util.AttributeSet;  
    3. import android.util.Log;  
    4. import android.view.View;  
    5. import android.widget.LinearLayout;  
    6. import android.widget.Scroller;  
    7.   
    8. public class CustomView extends LinearLayout {  
    9.   
    10.     private static final String TAG = "Scroller";  
    11.   
    12.     private Scroller mScroller;  
    13.   
    14.     public CustomView(Context context, AttributeSet attrs) {  
    15.         super(context, attrs);  
    16.         mScroller = new Scroller(context);  
    17.     }  
    18.   
    19.     //调用此方法滚动到目标位置  
    20.     public void smoothScrollTo(int fx, int fy) {  
    21.         int dx = fx - mScroller.getFinalX();  
    22.         int dy = fy - mScroller.getFinalY();  
    23.         smoothScrollBy(dx, dy);  
    24.     }  
    25.   
    26.     //调用此方法设置滚动的相对偏移  
    27.     public void smoothScrollBy(int dx, int dy) {  
    28.   
    29.         //设置mScroller的滚动偏移量  
    30.         mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy);  
    31.         invalidate();//这里必须调用invalidate()才能保证computeScroll()会被调用,否则不一定会刷新界面,看不到滚动效果  
    32.     }  
    33.       
    34.     @Override  
    35.     public void computeScroll() {  
    36.       
    37.         //先判断mScroller滚动是否完成  
    38.         if (mScroller.computeScrollOffset()) {  
    39.           
    40.             //这里调用View的scrollTo()完成实际的滚动  
    41.             scrollTo(mScroller.getCurrX(), mScroller.getCurrY());  
    42.               
    43.             //必须调用该方法,否则不一定能看到滚动效果  
    44.             postInvalidate();  
    45.         }  
    46.         super.computeScroll();  
    47.     }  
  • 相关阅读:
    flask 使用Flask-SQLAlchemy管理数据库(连接数据库服务器、定义数据库模型、创建库和表) --
    flask 操作数据库(分类) --
    flask渲染模板时报错TypeError: 'UnboundField' object is not callable --
    flask用宏渲染表单模板时,表单提交后,如果form.validate_on_submit()返回的是false的可能原因 --
    flask 单个页面多个表单(单视图处理、多视图处理) --
    flask 单个表单多个提交按钮 --
    jython 2.7.1 版本开发历史
    TP v5中Url Compat模式
    乱弹
    改改"坏"代码
  • 原文地址:https://www.cnblogs.com/zhongle/p/4226248.html
Copyright © 2011-2022 走看看