Android View的scrollTo()、scrollBy() 和Scroller类总结

Android View的scrollTo()、scrollBy() 和Scroller类总结
  1. ViewscrollTo()scrollBy() 使用介绍
  2. scrollTo()scrollBy()实践,自定义滑动效果
  3. Scroller滑动辅助类,startScroll()computeScrollOffset()使用介绍
  4. Scroller实践,使用示例
  5. 总结
一、View的scrollTo()、scrollBy()
1.1 scrollTo scrollBy 使用说明
  • scrollTo()scrollBy()方法是View中的,因此任何的View都可以通过这两种方法进行移动。首先要明白的是,scrollTo、scrollBy滑动的是View中的内容(而且还是整体滑动),而不是View本身。我们的滑动控件如SrollView可以限定宽、高大小,以及在布局中的位置,但是滑动控件中的内容(或者里面的childView)可以是无限长、宽的,我们调用View的scrollTo、scrollBy方法,相当于是移动滑动控件中的画布Canvas,然后进行重绘,屏幕上也就显示相应的内容。
1.2 scrollTo使用介绍
  • 调用scrollTo(100,0)表示将View中的内容移动到距离内容初始显示位置的x=100,y=0的地方,效果如下图:在这里插入图片描述
  • 调用scrollTo(0,100)效果如下图:在这里插入图片描述
  • 调用scrollTo(100,100)效果如下图:
    在这里插入图片描述
1.3 scrollBy使用介绍
  • 调用scrollBy(0,100)表示将View中的内容移动到原内容基础上x=x + 0,y=y + 100的地方,所以scrollBy是在原来的基础上移动的,效果如下图:在这里插入图片描述
  • scrollBy()的源码中其实也非常简单调用的就是scrollTo(),只不过是加上了当前的mScrollX或者 mScrollY
	public void scrollBy(int x, int y) {
   
        scrollTo(mScrollX + x, mScrollY + y);
    }
二、scrollTo和scrollBy实践,自定义滑动效果
  • 通过上面几个图,可以清楚看到scrollTo和scrollBy的作用和滑动坐标系的关系。在实际使用中,我们一般是在onTouchEvent()方法中处理滑动事件,在MotionEvent.ACTION_MOVE时调用scrollTo(int x,int y)进行滑动,在调用scrollTo(int x,int y)前,我们先要计算出两个参数值,即水平和垂直方向需要滑动的距离,如下:
public class ScrollActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scroll);
    }

    private int mLastX;
    private int mLastY;

    @Override
    public boolean onTouchEvent(MotionEvent event) {
   
        int y = (int) event.getY();
        int x = (int) event.getX();
        int action = event.getAction();
        View decorView = getWindow().getDecorView();
        switch (action) {
   
            case MotionEvent.ACTION_DOWN:
                mLastY = y;
                mLastX = x;
                break;
            case MotionEvent.ACTION_MOVE:
                <
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值