控制ScrollView的自动滚动速度

来源:互联网 发布:网络暴力漫画 编辑:程序博客网 时间:2024/06/10 01:25

因为ScrollView的scrollTo是直接滑到位置,而自带的smoothScrollTo还是太快了,0.25秒就滑到目标位置了,都不符合要求。

所以使用以下的方法自定义:

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()中,用来判断是否滚动是否结束。  

所以通过使用scroller,重写scrollView即可


public class SlowScrollView extends ScrollView{private Scroller mScroller;public SlowScrollView(Context context) {super(context);mScroller = new Scroller(context);}public SlowScrollView(Context context, AttributeSet attrs) {super(context, attrs);mScroller = new Scroller(context);}public SlowScrollView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mScroller = new Scroller(context);}//调用此方法滚动到目标位置  duration滚动时间    public void smoothScrollToSlow(int fx, int fy, int duration) {          int dx = fx - getScrollX();//mScroller.getFinalX();  普通view使用这种方法        int dy = fy - getScrollY();  //mScroller.getFinalY();          smoothScrollBySlow(dx, dy, duration);      }        //调用此方法设置滚动的相对偏移      public void smoothScrollBySlow(int dx, int dy,int duration) {          //设置mScroller的滚动偏移量          mScroller.startScroll(getScrollX(), getScrollY(), dx, dy,duration);//scrollView使用的方法(因为可以触摸拖动)  //        mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy, duration);  //普通view使用的方法        invalidate();//这里必须调用invalidate()才能保证computeScroll()会被调用,否则不一定会刷新界面,看不到滚动效果      }         @Override      public void computeScroll() {                //先判断mScroller滚动是否完成          if (mScroller.computeScrollOffset()) {                        //这里调用View的scrollTo()完成实际的滚动              scrollTo(mScroller.getCurrX(), mScroller.getCurrY());                            //必须调用该方法,否则不一定能看到滚动效果              postInvalidate();          }          super.computeScroll();      }         /**     * 滑动事件,这是控制手指滑动的惯性速度     */    @Override    public void fling(int velocityY) {        super.fling(velocityY / 4);    }}



0 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 弟媳妇一个月就大闹一次怎么办 丈夫出轨我亲弟媳妇我怎么办 被山西博大泌尿医院坑了怎么办 家长反应孩子学校受欺负老师怎么办 白色衣服和牛仔裤洗变色了怎么办 生完孩子肚子上的松皮怎么办 xp电脑玩cf进入地图黑屏怎么办 爸妈吵架妈妈走了爸爸哭了该怎么办 总担心旅馆被拍视频传上网怎么办 微博买了猜冠军现在停了怎么办 脸上毛孔大有黑头怎么办小窍门去 进去精神病院出来真的疯了怎么办 房子已过户新业主不交物业费怎么办 村委会欠百姓征地补偿款不给怎么办 因为近亲人人都不看好的婚姻怎么办 碰到工作中特别积极的同事怎么办 丈夫车祸死亡妻子和孩子以后怎么办 丈夫死后妻子改嫁儿子不同意怎么办 满了60岁社保没满15年怎么办 捷豹的dpf灯亮了怎么办 朋友如新直销产品是你该怎么办 传福音接受了却被家人拦阻该怎么办 奶奶出钱由孙子抓奖中奖后怎么办 我不想学车了驾校不同意退学怎么办 2017年大学挂科面临退学怎么办 微信重新登录后东西全没了怎么办 宝宝吃鸡蛋过敏全身起红疹怎么办 180在产蛋鸡因断鸡减产怎么办 住友39熔接机熔接损耗大怎么办 支付宝实名认证刷脸失败怎么办 支付宝注册刷脸不是本人怎么办 小学科学只考88分中学怎么办 收银机关机时才上传数据是怎么办 刚做的系统玩cf卡屏怎么办 办健康证的资料掉了怎么办 刚刚办得的健康证掉了怎么办 房子都过户了银行贷不了款怎么办 我要办大病迁出应该怎么办啊? 遗产继承后户口没地迁出怎么办 安徽蒙城怎么办去韩国的签证的 夜间有人私自收停车费应该怎么办