• 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.     }  
    48. }  
  • 相关阅读:
    修改VS中的附加依赖项的继承值
    cocos2dx的addChild接口设计
    svn cleanup失败解决方法
    vi显示中文乱码
    CentOS 7.4 shell 不显示当前用户和路径的问题
    生产工具的差距导致的生产力(生产效率)的差距
    GPU的历史:从固定管线到可编程管线再到通用计算平台
    聊Java中的任务调度的实现方法及比较
    Spring Boot 揭秘与实战之RabbitMQ
    一个让Java事半功倍的反射库
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4800100.html
Copyright © 2020-2023  润新知