Android Scroller 的简单用法

关于scroller 他是Androidview 移动的一个辅助类

首先来说一说View 的移动,
View 有两个移动的方法:
View.scrollBy(x, y)
View.scrollTo(x, y)

需要注意的 这两个方法 移动的不是View 本身, View 里面的内容,
不能单纯的理解是移动子View

例如TextView 调用 scrollBy scrollTo 方法移动的是 TextView 的文字内容

ok 再来说说 这两个方法的具体 用途以及区别

scrollBy(x, y) 方法是相对当前的位置 再移动 x像素, y像素
scrollTo(x, y) 方法是相对初始没有移动的位置, 移动的距离, 可以理解为移动到

x 为正 表示向左移动
y 为正 表示向上移动

如果想移动的 View 本身可以使用
ViewGroup.setTranslationX(x)
ViewGroup.setTranslationY(x)
这里
x 为正表示向右移动
y 为正表示向下启动

ok 接下来说说 Scroller 这个辅助类

可以先看下下面的代码 很简单 

public class MyViewGroup extends RelativeLayout {
    public static final String TAG = "MyViewGroup";

    boolean flag = true;
    private Scroller mScroller;

    public MyViewGroup(Context context) {
        super(context);
        init();
    }

    public MyViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mScroller = new Scroller(getContext());
    }

    @Override
    public void computeScroll() {
        if (mScroller.computeScrollOffset()) {
            LogUtil.d(TAG, "mScroller.getCurrX() = " + mScroller.getCurrX());
            scrollTo(mScroller.getCurrX(), 0);
            postInvalidate();
        }
    }

    public void bingScroll() {
        LogUtil.d(TAG, "bingScroll falg = " + flag);
        if (flag) {
            mScroller.startScroll(0, 0, 500, 0, 1000);
        } else {
            mScroller.startScroll(500, 0, -500, 0, 1000);
        }
        flag = !flag;
        invalidate();
    }
}

当调用 bingScroll 的时候 回去调用 startScroll 方法, 然后在刷新View
在刷新View 的时候 View 会调用 computeScroll 方法, 在这个方法里面,
可以用 mScroller.computeScrollOffset() 来判断, 我们 用 startScroll 是还在移动时间内,是否还需要移动,
如果 mScroller.computeScrollOffset() 返回true 那么就说明需要移动了,
可以使用 mScroller.getCurrX() 或 mScroller.getCurrY() 获取当前移动的值 
然后把这个值设置给当前View 就好

上面就是一个非常简单的 使用 scroller 的例子 
我们大多用在 :
当我们想让View 跟手指滑动的时候,
可以在滑动过程中 获取手指移动距离,使用 View 本身的scrollTo方法 ,来实现移动
但是 当我们 抬起手指是,向让View 惯性移动, 就不好再用 View 本身的scrollTo方法了
那么这时 就可以使用 Scroller.startScroll(x,y, dx,dy, duration) 方法了这样View 就可以在我们抬起手指后也依然滑动了

在来详细讲一下  Scroller.startScroll(x,y, dx,dy, duration) 方法
x, y 表示滑动的其实位置, 这个位置是相对于最初始 没有滑动时 的一个位置
dx, dy 表示滑动距离, 同样
dx 为正 表示向左移动
dy 为正 表示向上移动
duration 表示滑动所需要的时间 
mScroller.startScroll(0, 0, 500, 0, 1000);
mScroller.startScroll(500, 0, -500, 0, 1000);
从上面的代码可以看到
一开始  view 在 x轴上 向左移动了500像素
然后移动回 最开始的位置

对了 View 还有两个方法 获取当前View 滑动的距离
getScrollX()
getScrollY()

上面的 mScroller.startScroll(500, 0, -500, 0, 1000); 方法可以改为:
mScroller.startScroll(getScrollX(), 0, -getScrollX(), 0, 1000);

ok scroll 的基本相关内容基本ok 了具体到一下 跟手滑动的相关内容, 后面会再次讲到 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值