安卓自定义View之滑动

Scroller的基础知识

Scroller类其实并不负责“滚动”这个动作,“滚动”的动作[1]是由基类View的scrollTo(x,y)scrollBy(dx,dy)的这两个方法完成的,Scroller类只是根据要滚动的起始位置和结束位置生成中间的过渡位置,从而形成一个滚动的动画。

一个View在容器(比如ViewGroup)中的滚动不是自身发起的动作,而是由父容器驱动容器内的子控件来完成,换句话说就是发生滚动效果的是组件的内容。例如在ViewGroup中使用Scroller,移动的是所有子View。但如果在TextView中使用,那么移动的将是TextView中的文本。

scrollTo(x,y)和scrollBy(dx,dy)

scrollTo,滚动到指定的位置
scrollBy,在原来的基础上,在滚动(dx,dy)的距离,内部的实现其实是调用了scrollTo

public void scrollBy(int x, int y) {
  scrollTo(mScrollX + x, mScrollY + y);
}

此处的x,y是相对于当前View左上角
当x为负数时,表示内容向右滚动
当y为负数时,表示内容向下滚动

getX,getTranslationX和getScrollX的区别

  • getX()与getY()方法获取的是View左上角相对于父容器的坐标
    当View没有发生平移操作时,getX()==getLeft()、getY==getTop()。

  • getTranslationX与getTranslationY是View左上角相对于父容器的偏移量:translationX = getX() - getLeft(),当View未发生平移操作时,translationX 与translationY都为0。

  • getScrollX与getScrollY得到的是View调用scrollTo或者scrollBy方法得到的值,无论这个值怎么改变,都不会影响View相对于父View的坐标,因为它滚动的是View中的内容,而不是View本身

你可能感兴趣的:(安卓自定义View之滑动)