美文网首页
安卓自定义View之滑动

安卓自定义View之滑动

作者: sofarsogoo_932d | 来源:发表于2018-12-09 20:38 被阅读0次

    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之滑动

          本文链接:https://www.haomeiwen.com/subject/htvkhqtx.html